Действительно ли возможно отключить автоматическую прикрепляющую окно опцию Windows 7 в приложении WPF?
У меня здесь нет Windows 7, поэтому я не могу это проверить, но вот что я бы попробовал:
1- Создайте тестовую форму и переопределить WndProc
2- Тестировать и регистрировать определенные сообщения, относящиеся к изменению размера, положения и состояния окна.
3- Определите , являются ли сообщения, отправляемые окну, когда оно закреплено, комбинацией Size / Position / WindowState или есть другое новое сообщение Windows 7 (5 минут поиска ничего мне не раскрыл.)
4- Получив сообщения, проверьте, не возникает ли "уникальный" случай.
5- Измените код в соответствии с этим уникальным случаем.
Если никто другой ничего не придумает, я могу попробовать это дома в эти выходные.
В разделе Специальные возможности панели управления выберите
Упростите фокусировку на задачах
и поставьте галочку
Запретить автоматическое упорядочение окон при перемещении к краю экрана
Если вы приводите пример «Sticky Notes» Win7, вы могли заметить, что у него НЕТ стандартной границы окна. Исходя из этого, я могу только сказать вам, что нет прямого способа сделать это, за исключением того, что вы установили ResizeMode = "NoResize"
и вручную обработали поведение изменения размера. Ниже приводится очень простое непрофессиональное решение, которое я быстро создал, чтобы вы начали, но вы можете добавить больше функций, если хотите:)
<Window
x:Class="WpfApplication1.Window1"
x:Name="window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Width="300"
Height="300"
ResizeMode="NoResize"
WindowStyle="None"
AllowsTransparency="True"
Background="Transparent"
WindowState="Maximized">
<Window.Resources>
<x:Array
x:Key="TextBlockList"
Type="{x:Type TextBlock}">
<TextBlock
Text="○ Resize Horizontally by dragging right grip" />
<TextBlock
Text="○ Resize Vertically by dragging bottom grip" />
<TextBlock
Text="○ Move Horizontally by dragging left grip" />
<TextBlock
Text="○ Move Verticallyby dragging top grip" />
</x:Array>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto" />
<RowDefinition
Height="{Binding Height, Mode=OneWay, ElementName=window}" />
<RowDefinition
Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="Auto" />
<ColumnDefinition
Width="{Binding Width, Mode=OneWay, ElementName=window}" />
<ColumnDefinition
Width="Auto" />
</Grid.ColumnDefinitions>
<GridSplitter
Grid.Column="1"
Grid.Row="1"
HorizontalAlignment="Left"
MinWidth="5" />
<GridSplitter
Grid.Column="1"
Grid.Row="1"
HorizontalAlignment="Right"
MinWidth="5" />
<GridSplitter
Grid.Column="1"
Grid.Row="1"
VerticalAlignment="Top"
MinHeight="5"
ResizeDirection="Rows"
HorizontalAlignment="Stretch" />
<GridSplitter
Grid.Column="1"
Grid.Row="1"
VerticalAlignment="Bottom"
MinHeight="5"
ResizeDirection="Rows"
HorizontalAlignment="Stretch" />
<Border
Grid.Column="1"
Grid.Row="1"
Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
Margin="5">
<Grid x:Name="root">
<ItemsControl
ItemsSource="{StaticResource TextBlockList}" />
</Grid>
</Border>
</Grid>
</Window>
Вы даже можете создать элемент управления (в основном панель), размер которого можно изменять и перемещается в пределах своего родительского холста. Теперь этот элемент управления можно заполнить в прозрачном развернутом окне. Это даст вам иллюзию того, что ваш элемент управления - это окно, которое не реагирует на «Window Snap» и не стыкуется!
Надеюсь, это поможет.
С уважением,
Михир Гокани