2

ユーザーが最初の画面でアプリケーションを実行すると、アプリケーションは2番目のモニターを検出し、その位置を2番目の画面に変更します。

これには問題があり、メイン ウィンドウの子が最初のモニターに表示されます。所有者プロパティが正しく確立されている場合、これは発生しません。

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

私のアプリケーションは複雑で、子ウィンドウを呼び出すコンポーネントで構成されていますが、問題を説明するコードを添付しました。最初のモニターでコードを実行し、手動でウィンドウをセカンダリ モニターに移動し、ボタンを押して最初のモニターに表示される子ウィンドウを呼び出します:( .

: 各子ウィンドウでセカンダリ モニターを検出してそこに移動するコードを記述できることはわかっていますが、可能であれば、よりシンプルで正しい解決策が必要です。

注 2 : '.exe' から直接、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 に答える