1

状況:

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>

そして、 my ContextMenuof my で次のように使用しますMyUserControl

<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:

my のコンストラクターMyUserControl:

public GrowingDisplay()
    {
        InitializeComponent();

        HeightProperty.AddOwner(typeof (GrowingDisplay),
                                new FrameworkPropertyMetadata(OnHeightPropertyChanged));
        WidthProperty.AddOwner(typeof (GrowingDisplay),
                               new FrameworkPropertyMetadata(OnWidthPropertyChanged));

        CommandManager.InvalidateRequerySuggested();
    }
4

2 に答える 2

0

この投稿は、問題の解決に役立つはずです: http://wpftutorial.net/RoutedCommandsInContextMenu.html

于 2013-08-17T15:38:30.293 に答える