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