我有這樣定義的靜態RoutedCommand
:
public static class Commands
{
public static readonly RoutedCommand GrowingOperation = new RoutedCommand("GrowingOperation", typeof(GrowingDisplay));
}
在我MyUserControl.xaml
我這樣定義命令:
<UserControl.CommandBindings>
<CommandBinding Command="{x:Static local:Commands.GrowingOperation}"
Executed="GrowingOperationExecuted"
CanExecute="GrowingOperationCanExecute"/>
</UserControl.CommandBindings>
而且然後在我的MyUserControl
的ContextMenu
中像這樣使用它:
<UserControl.ContextMenu>
<ContextMenu x:Name="GrowingContextMenu">
<MenuItem Header="Grow"
Command="{x:Static local:Commands.GrowingOperation}"
CommandParameter="grow"/>
</ContextMenu>
</UserControl.ContextMenu>
問題:
的ContextMenu
出現,但無論是GrowingOperationExecuted
也不GrowingOperationCanExecute
被調用。打開ContextMenu
時,我也沒有得到任何異常。
開放ContextMenu
看起來是這樣的:
它似乎被啓用,但絕對沒有互動,甚至沒有一個懸停動畫。 這裏的錯誤在哪裏?
編輯:
這裏的指揮方法的實現:
private void GrowingOperationExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (e.Parameter == null)
throw new ArgumentException("ExecutedRoutedEventArgs must contain parameter.");
var task = e.Parameter.ToString().ToLower();
switch (task)
{
case "grow":
Growing.SpeedUpGrowing();
break;
default:
throw new ArgumentOutOfRangeException();
}
}
private void GrowingOperationCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (e.Parameter == null)
throw new ArgumentException("ExecutedRoutedEventArgs must contain parameter.");
var task = e.Parameter.ToString().ToLower();
switch (task)
{
case "grow":
e.CanExecute = Growing.CanSpeedUpGrowing();
break;
default:
throw new ArgumentOutOfRangeException();
}
}
編輯2:
我MyUserControl
的構造:
public GrowingDisplay()
{
InitializeComponent();
HeightProperty.AddOwner(typeof (GrowingDisplay),
new FrameworkPropertyMetadata(OnHeightPropertyChanged));
WidthProperty.AddOwner(typeof (GrowingDisplay),
new FrameworkPropertyMetadata(OnWidthPropertyChanged));
CommandManager.InvalidateRequerySuggested();
}
我在我的MyUserControl後面的代碼中實現了這兩個方法,然後在我的MainWindow中使用這個usercontrol。 嘗試你的解決方案... – Herdo
如果它不起作用,你會介意發佈'GrowingOperationCanExecute'只是爲了確保它正確實施? – Th3BFG
好的。改用你的UICommands並清理XAML代碼。 仍然無法正常工作。 就像之前說過的,方法中的斷點甚至沒有被執行,但我會在上面發佈這兩種方法。 – Herdo