我想知道如何在Visual Tree中处理通过ShowDialog打开的窗口。
例如,Window A通过ShowDialog打开Window B.在窗口B上触发路由命令时,窗口A不接收命令(即使它正在侦听它)。
有没有办法让这项工作?
谢谢! 乔恩
答案 0 :(得分: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>
或者,如果您从Window B中的代码执行:
SomeCommand.Execute(params, this.Owner);
CommandTarget将让Window A侦听CanExecute和Execute。