2

我想知道如何在可视树中处理通过 ShowDialog 打开的窗口。

例如,窗口 A 通过 ShowDialog 打开窗口 B。在窗口 B 上触发路由命令时,窗口 A 不会收到该命令(即使它正在侦听它)。

有什么办法可以使这项工作?

谢谢!乔恩

4

1 回答 1

5

我们在我们的应用程序中一直遇到这种情况。为此,我们使用 Window.Owner 属性和 ICommandSource.CommandTarget 属性。

例如,在窗口 A 中:

DialogWindow windowB = new DialogWindow();
windowB.Owner = this;
windowB.ShowDialog();

然后,在 DialogWindow 中,所有执行命令的控件都将其 CommandTarget 绑定到父窗口的所有者:

<Window x:Class="DialogWindow" x:Name="wnd">
    <Button Command="SomeCommand" CommandTarget="{Binding Owner, ElementName=wnd}"/>
</Window>

或者,如果您从窗口 B 中的代码执行:

SomeCommand.Execute(params, this.Owner);

CommandTarget 将让窗口 A 监听 CanExecute 和 Execute。

于 2008-12-11T19:57:28.880 回答