WPF路由命令和ShowDialog Windows

时间:2008-12-11 13:18:54

标签: wpf command showdialog routed

我想知道如何在Visual Tree中处理通过ShowDialog打开的窗口。

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

有没有办法让这项工作?

谢谢! 乔恩

1 个答案:

答案 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。