Ich habe zwei WPF-Projekte, eines ist eine .NET 4.7-DLL und das andere ist eine Desktop-App.Schaltfläche deaktiviert, obwohl ICommand.CanExecute zu True ausgewertet wird
In meiner dll habe ich die Klassen Viewport2D
und ViewportCommands
public static class ViewportCommands
{
public static RoutedCommand ResetView { get; } = new RoutedCommand(nameof(ResetView), typeof(ViewportCommands));
public static RoutedCommand ZoomFit { get; } = new RoutedCommand(nameof(ZoomFit), typeof(ViewportCommands));
}
Meine Viewport2D diese Befehle in dem Ctor binden:
public Viewport2D()
{
...
CommandBindings.Add(new CommandBinding(NavigationCommands.IncreaseZoom, ExecuteZoomIn, CanZoom));
CommandBindings.Add(new CommandBinding(NavigationCommands.DecreaseZoom, ExecuteZoomOut, CanZoom));
CommandBindings.Add(new CommandBinding(ViewportCommands.ZoomFit, (o, e) => ZoomFit(), CanZoom));
CommandBindings.Add(new CommandBinding(ViewportCommands.ResetView, (o, e) => Reset(), (o, e) => e.CanExecute = true));
...
}
Wie Sie den ResetView
Befehl immer den Wert true sehen. Der ZoomFit
Befehl wird in den meisten Fällen auch als wahr ausgewertet (und beide Funktionen werden aufgerufen, das habe ich bereits überprüft).
In meiner WPF-Anwendung verwende ich diese Kontrolle:
<controls1:Viewport2D x:Name="Zoombox" ...>
<controls1:Viewport2D.InputBindings>
<MouseBinding Gesture="{wpfUtils:MouseWheel Direction=Down}" Command="DecreaseZoom" CommandTarget="{Binding ElementName=Zoombox}" />
<MouseBinding Gesture="{wpfUtils:MouseWheel Direction=Up}" Command="IncreaseZoom" CommandTarget="{Binding ElementName=Zoombox}" />
</controls1:Viewport2D.InputBindings>
...
</controls1:Viewport2D>
...
<Button Content="100%" Width="70" Command="controls1:ViewportCommands.ResetView" />
<Button Content="Zoom Fit" Width="70" Command="controls1:ViewportCommands.ZoomFit" />
Die IncreaseZoom
und DecreaseZoom
sind aus dem NavigationCommands
Klasse (Teil des .NET).
Beide Schaltflächen aus dem obigen Code sind immer deaktiviert, obwohl sie aktiviert sein sollten. Das Zoomen mit beiden Zoom-Befehlen funktioniert jedoch einwandfrei.
Was mache ich hier falsch?
haben Sie jeder verbindliche Fehler im Ausgabefenster von Visual Studio? weil ich merkwürdig fand, dass du das Viewport2D bindst = Geste scheint ok /// aber die Knöpfe auf einigen statischen Befehlen in ViewportCommands sind nicht das selbe ??? – GCamel
versuchen – GCamel
Der Verweis auf den Befehl ist absolut in Ordnung. Ich bekomme keine Fehler oder Ausnahmen. Wie sollte 'Command =" {Bindig ElementName = Zoombox, Path = ResetView} "' funktionieren? ResetView ist kein Mitglied von Viewport2D, sondern von ViewportCommands. – Timo