Hier ist das Setup (Fremd Layout-Code entfernt) zu verwenden:Wie Command.CanExecute von einem Kind Kontrolle
Window.xaml
<Button Name="btn_Next" Command="NextPage">Next</Button>
<ContentControl Name="contentControl1" >
<Binding ElementName="MainWindow" Path="CurrentPage"/>
</ContentControl>
Window.xaml.cs Constructor
var nextCommand = new CommandBinding(NavigationCommands.NextPage);
nextCommand.CanExecute += nextCommand_CanExecute;
nextCommand.Executed += nextCommand_Executed;
CommandBindings.Add(nextCommand);
Das funktioniert gut im Basisbeispiel, wo nextCommand_CanExecute
überprüft, ob die aktuelle Seite die letzte Seite ist. Diese Logik überprüft jedoch gerade ein Array und funktioniert nur für die lineare Navigation. Allerdings wird die Navigation baumartig sein und das wird nicht funktionieren, wenn die Elemente in der contentControl1
manchmal in verschiedene Richtungen verzweigen. Also, ich möchte die Benutzerkontrolle haben, die die CurrentPage
die Möglichkeit hat, die CanExecute
zu überschreiben. Mein Problem ist, dass ich nicht herausfinden kann, wie man die UserControl
startet, um die CanExecute
zu starten. Ich habe versucht, eine Reihe von CommandTarget
Einstellungen nutzlos zu verwenden ... mein Kind Steuerelement hat es nie CanExecute
Methode ausgelöst. Ich habe sogar versucht, die e.ContinueRouting = true
im CanExecute des Elternfensters zu verwenden. Hier ist der Benutzerkontrollcode, falls das hilft.
User Control Constrtuctor:
var nextCommand = new CommandBinding(NavigationCommands.NextPage);
nextCommand.CanExecute += nextCommand_CanExecute;
CommandBindings.Add(nextCommand);
User Control CanExecute Methode:
private void nextCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
e.Handled = true;
}
Darn, das war, was ich dachte, dass ich tun müsste ... und hatte gehofft, dass etwas bereits eingebaut war –
Ich denke, der einzige Weg, um das eingebaute Ding zu arbeiten wäre, die Navigation zu beherbergen Schaltflächen innerhalb des Benutzersteuerelements, das nicht so aussieht, als würde es für Sie funktionieren. –