2

我有一个在第二个屏幕上运行的应用程序,当用户在第一个屏幕上运行应用程序时,应用程序检测到第二个监视器并将其位置更改为辅助屏幕。

这有一个问题,主窗口的子窗口出现在第一个监视器中。如果正确建立了所有者财产,则不应发生这种情况。

Window1 w = new Window1();
win.Owner = Application.Current.MainWindow;

我的应用程序很复杂,由调用子窗口的组件组成,但我附上了一个代码来说明这个问题。在第一个监视器中执行代码,手动将窗口移动到辅助监视器并按下按钮调用出现在第一个监视器中的子窗口:(。

注意:我知道我可以编写一个代码来检测每个子窗口中的辅助监视器并移动到那里,但如果可能的话,我想要一个更简单和正确的解决方案。

注意 2:直接从“.exe”在 Visual Studio 外部运行应用程序。在 Visual Studio 中工作正常。

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Control="clr-namespace:Borrarrrrr"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Control:UserControl1  x:Name="ctr" />
    </Grid>
</Window>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window1 w = new Window1();
        //w.Owner = this;
        w.Owner = Application.Current.MainWindow;
        w.Show();
    }
}


<UserControl x:Class="Test.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Button Click="Button_Click"></Button>
    </Grid>
</UserControl>

    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Window1 w = new Window1();
            w.Owner = Application.Current.MainWindow;
            w.Show();
        }
    }


<Window x:Class="Test.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" 
        WindowStartupLocation="CenterOwner" WindowStyle="None" AllowsTransparency="True"
        WindowState="Maximized">
    <Grid Background="Aqua">

    </Grid>
</Window>
4

1 回答 1

3

尝试设置Window.WindowStartupLocation

private void Button_Click(object sender, RoutedEventArgs e)
{
    Window1 w = new Window1();
    w.Owner = Application.Current.MainWindow;
    w.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
    w.Show();
}
于 2013-06-20T07:04:52.747 回答