Я обнаружил странную ошибку в своем приложении WPF и пытаюсь определить, является ли это проблемой с WPF или моим графическим драйвером, чтобы я мог сообщить об этом в соответствующую компанию. У меня Quadro FX 1700 с последними драйверами (197.54) в системе Windows XP, на котором запущено приложение .NET 3.5 SP1.
У меня есть два монитора, мой основной слева и дополнительный справа. Проблема возникает, когда я максимизирую, а затем восстанавливаю дочернее окно главного окна на моем основном мониторе. Дочернее окно имеет правильный размер на основном мониторе, но оно рисуется на моем дополнительном мониторе, как если бы оно все еще было развернуто. Перемещение дочернего окна на основном мониторе перемещает его на вспомогательном.
Восстановленное дочернее окно отображается на дополнительном мониторе, как если бы оно все еще было развернуто http://i43.tinypic.com/ok94ex.png
Я сделал пример приложения (код ниже), который вызывает такое поведение.
- Запустите приложение и убедитесь, что главное окно находится на вашем основном мониторе.
- Дважды щелкните главное окно. Должно появиться зеленое дочернее окно.
- Щелкните по зеленому дочернему окну, чтобы развернуть его.
- Нажмите зеленое дочернее окно, чтобы восстановить.
Может кто-нибудь еще воспроизвести эту проблему? В моей системе зеленый дочерний элемент восстанавливается, но затем он рисуется на моем основном и дополнительном мониторах, а не только на основном мониторе.
App.xaml
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DualMonitorBug.App"
StartupUri="Shell.xaml" />
App.xaml.cs
using System.Windows;
namespace DualMonitorBug { public partial class App : Application { } }
Shell.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DualMonitorBug.Shell"
Title="Shell" Height="480" Width="640"
MouseDoubleClick="ShowDialog" />
Shell.xaml.cs
using System.Windows;
using System.Windows.Input;
namespace DualMonitorBug
{
public partial class Shell : Window
{
public Shell()
{
InitializeComponent();
}
private void ShowDialog(object sender, MouseButtonEventArgs e)
{
DialogWindow dialog = new DialogWindow();
dialog.Owner = this;
dialog.Show();
}
}
}
DialogWindow.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DualMonitorBug.DialogWindow"
Title="Dialog Window" Height="240" Width="320"
AllowsTransparency="True"
Background="Green"
MouseLeftButtonDown="ShowHideDialog"
WindowStyle="None" />
DialogWindow.xaml.cs
using System.Windows;
using System.Windows.Input;
namespace DualMonitorBug
{
public partial class DialogWindow : Window
{
public DialogWindow() { InitializeComponent(); }
private void ShowHideDialog(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
if (this.WindowState == WindowState.Normal)
{
this.DragMove();
}
}
else
{
this.WindowState
= (this.WindowState == WindowState.Normal)
? WindowState.Maximized
: WindowState.Normal;
}
}
}
}