wpf windows位置问题

时间:2013-06-19 16:05:12

标签: c# .net wpf windows xaml

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

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

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

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

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

Note2 :直接从'.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>

1 个答案:

答案 0 :(得分: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();
}