0

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

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

有没有办法让它保持不变或更有效的方法?基本上,我试图确认我是否以正确的方式做事——一直在努力改进。窗口被按钮事件打开,所以我想知道是否有办法找出从哪个窗口调用事件并将该窗口分配为所有者,而不必搜索所有打开的窗口并硬编码所有者类型。

4

2 回答 2

2

这可以。如果您打开了足够多的窗口,这里的 O(N) 是一个问题,那么您的实际问题比这个循环要大得多。

也就是说,您不妨break;if. theTransactionsWindow.Show()此外,对于 Windows 来说,也设置可能会是更好的架构theTransactionsWindow.Owner = this

于 2013-12-03T22:06:22.250 回答
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;
    }
于 2013-12-03T22:59:50.347 回答