这是设置(删除了无关的布局代码):
窗口.xaml
<Button Name="btn_Next" Command="NextPage">Next</Button>
<ContentControl Name="contentControl1" >
<Binding ElementName="MainWindow" Path="CurrentPage"/>
</ContentControl>
Window.xaml.cs 构造函数
var nextCommand = new CommandBinding(NavigationCommands.NextPage);
nextCommand.CanExecute += nextCommand_CanExecute;
nextCommand.Executed += nextCommand_Executed;
CommandBindings.Add(nextCommand);
这在基本示例中效果很好,其中nextCommand_CanExecute
检查 CurrentPage 是否是最后一页。但是,该逻辑目前只是检查一个数组,并且只适用于线性导航。但是,导航将是树状的,这将不起作用,其中的项目contentControl1
有时会向不同的方向分支。所以,我希望用户控件CurrentPage
有机会覆盖CanExecute
. 我的问题是我无法弄清楚如何UserControl
启动CanExecute
. 我尝试使用多种CommandTarget
设置均无济于事……我的子控件从未CanExecute
触发过它的方法。我什至尝试e.ContinueRouting = true
在父窗口的 CanExecute 中使用。这是用户控制代码,以防万一。
用户控制构造器:
var nextCommand = new CommandBinding(NavigationCommands.NextPage);
nextCommand.CanExecute += nextCommand_CanExecute;
CommandBindings.Add(nextCommand);
用户控件 CanExecute 方法:
private void nextCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
e.Handled = true;
}