セットアップは次のとおりです(余分なレイアウトコードは削除されています)。
Window.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;
}