Всплывающее окно 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, опубликованном ранее. Это исправление удалит проблему позиции вместе с вашим приложением, если это то, что вы хотите.

Всплывающее положение с изменением рутины

Надеюсь, это поможет кому-то!