C# WindowsStartUpLocation=";“中心所有者”;当所有者为空时

C# WindowsStartUpLocation=";“中心所有者”;当所有者为空时,c#,wpf,C#,Wpf,如果所有者窗口为空,那么WindowStartupLocation=“CenterOwner”究竟如何工作?是否有可能以某种方式更改此行为(最好在应用程序中全局更改,而不是在每个窗口上更改) 在我的应用程序中,我有几个对话框(大多数对话框有助于更改应用程序的一些配置/设置),在定义application.Current.main窗口之前或之后显示这些对话框。例如,在应用程序启动时,我会显示一个窗口,有人可以在其中选择应用程序语言。我通过应用程序设置窗格/窗口显示完全相同的内容 我希望出现此语言选

如果所有者窗口为空,那么
WindowStartupLocation=“CenterOwner”
究竟如何工作?是否有可能以某种方式更改此行为(最好在应用程序中全局更改,而不是在每个窗口上更改)

在我的应用程序中,我有几个对话框(大多数对话框有助于更改应用程序的一些配置/设置),在定义
application.Current.main窗口之前或之后显示这些对话框。例如,在应用程序启动时,我会显示一个窗口,有人可以在其中选择应用程序语言。我通过应用程序设置窗格/窗口显示完全相同的内容

我希望出现此语言选择窗口

  • 在应用程序启动时调用时,位于屏幕中央,因此
    application.Current.MainWindow
    为空,并且选择窗口没有所有者
  • 从应用程序设置窗格/窗口调用时,位于其父窗口/所有者窗口的中心
WindowStartupLocation
是定义窗口位置的属性。但是,如果我设置了
WindowStartupLocation=“CenterOwner”
且所有者为空,则窗口将显示在屏幕的左上角

到目前为止,我在“every”窗口构造函数中有一个if语句,用于检查所有者是否为null并更改
WindowStartupLocation

if (dialog.Owner == null && dialog.WindowStartupLocation == WindowStartupLocation.CenterOwner)
{
    dialog.WindowStartupLocation = WindowStartupLocation.CenterScreen;
}

有没有更优雅的方法?例如,指示框架处理它。为WindowsStartUplocation设置类似回退值的值,例如,如果所有者为空,则对话框必须有所有者。如果你不给它一个,那么除了它的位置之外,更多的可能会出错。您很容易在对话框或关闭对话框后显示的窗口出现Z顺序问题,消失在另一个应用程序的窗口后面。对于对话框来说尤其痛苦,因为它没有(不应该)任务栏按钮。@HansPassant理解,但当我从
App.xaml.cs
(应用程序启动)显示窗口时,它的所有者是谁?正如我在问题中所说,如果此窗口具有
WindowStartupLocation=“CenterOwner”
,它将显示在屏幕的左上角。所以我假设它的所有者是
null
,您可以为“dialog”窗口定义基类,并将
WindowStartupLocation
选择封装在基类中constructor@AlekseyL. 这(将逻辑移到基类)将是我目前正在做的下一步,也是迄今为止最好的解决方案。不过,我想避免使用if条件进行手动切换。