我想知道如何在可视树中处理通过 ShowDialog 打开的窗口。
例如,窗口 A 通过 ShowDialog 打开窗口 B。在窗口 B 上触发路由命令时,窗口 A 不会收到该命令(即使它正在侦听它)。
有什么办法可以使这项工作?
谢谢!乔恩
我想知道如何在可视树中处理通过 ShowDialog 打开的窗口。
例如,窗口 A 通过 ShowDialog 打开窗口 B。在窗口 B 上触发路由命令时,窗口 A 不会收到该命令(即使它正在侦听它)。
有什么办法可以使这项工作?
谢谢!乔恩
我们在我们的应用程序中一直遇到这种情况。为此,我们使用 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。