Всплывающее окно Windows 8
При переносе приложения WPF на экземпляр Windows 8 (x64) под VMware, я обнаружил, что все всплывающие окна не совпадают с тем, что они должны быть. Дальнейшие исследования показывают, что это обычная "проблема" даже для вновь созданного проекта. Всплывающее управление WPF, похоже, изменило значение слева и справа! Проблему можно показать, создав приложение wpf с помощью vs 2012 и разместив в нем несколько всплывающих окон, например:
<Grid Background="Gray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="129*"/>
<ColumnDefinition Width="264*"/>
<ColumnDefinition Width="124*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="1" Grid.Column="1" Background="LightGray">
<Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Right" AllowsTransparency="True" >
<TextBlock Text="Right" Foreground="White" />
</Popup>
<Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Left" AllowsTransparency="True" >
<TextBlock Text="Left" Foreground="White" />
</Popup>
<Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Top" AllowsTransparency="True" >
<TextBlock Text="Top" Foreground="White" />
</Popup>
<Popup StaysOpen="True" IsOpen="True" Grid.RowSpan="2" Placement="Bottom" AllowsTransparency="True" >
<TextBlock Text="Bottom" Foreground="White" />
</Popup>
</DockPanel>
</Grid>
Всплывающее окно, которое должно отображаться слева, фактически отображается справа, и наоборот, тот, который должен находиться в левом нижнем углу, отображается внизу справа и т.д.
Мой вопрос: 1) это ошибка или функция? 2) если это функция, как сделать минимальные изменения кодов, чтобы они выполнялись одинаково в Windows 7 и Windows 8?
Ответы
Ответ 1
Дальнейшее исследование показывает, что внутри панели управления есть настройка:
ControlPanel- > Hardware and Sound- > Tablet PC (имя node, возможно, не совсем соответствует, так как я использую неанглийскую версию Windows 8). Существует настройка для руки, с которой пользователь предпочитает писать.
Нужно выбрать "Я предпочитаю писать с помощью левой руки", чтобы он помещал всплывающее окно в "правильное положение" (без использования вышеприведенного решения) в соответствии с руководством для .net framework. Это предположение не может быть правильным вообще, по крайней мере для приложений для уничтожения!
Ответ 2
Мы написали быстрое решение этого вопроса и разместили код в другом потоке SO, опубликованном ранее. Это исправление удалит проблему позиции вместе с вашим приложением, если это то, что вы хотите.
Всплывающее положение с изменением рутины
Надеюсь, это поможет кому-то!