这是在WPF中查找和分配窗口所有者的有效方法吗?

时间:2013-12-03 22:03:08

标签: c# wpf window owner

这是我现在这样做的方式,但我不确定它是否效率低,因为运行时是O(n):

foreach (Window window in Application.Current.Windows)
{
    if (window.GetType() == typeof(TransactionsWindow))
    {
        this.Owner = window;
    }
}

有没有办法让它保持不变或比我正在做的更有效?基本上,我正在努力确认我是否采取了正确的方式 - 始终努力改进。窗口被按钮事件打开,所以我想知道是否有办法找出调用事件的窗口并将该窗口指定为所有者,而不是必须搜索所有打开的窗口并硬编码所有者类型。

2 个答案:

答案 0 :(得分:2)

这很好。如果你有足够的窗户打开O(N)这里是一个问题,你的实际问题比这个循环大得多。

也就是说,您可以在break;内加if。此外,为theTransactionsWindow.Show()设置theTransactionsWindow.Owner = this

的窗口可能是更好的架构

答案 1 :(得分:0)

在按钮点击事件中使用Source属性RoutedEventArgs变量来查找发出呼叫的实际按钮,然后找到一个更清晰的解决方案,而不是循环浏览窗口,然后该按钮的窗口所有者。如下所示:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        Button btn = e.Source as Button;
        if (btn == null)
            return;

        Window parentWindow = Window.GetWindow(btn);
        this.Owner = parentWindow;
    }