我正在尝试将命令绑定到MenuItems
我ContextMenu
将与Button
. 但为此,我将所有命令定义为static
在我的ResourceDictionary
.
public class DesignerCanvas{
....
public static RoutedCommand MyCommand = new RoutedCommand();
....
}
在我的 中MainWindow.xaml
,我将此命令与我的实现挂钩,MainWindow.xaml.cs
如下所示:
<CommandBinding Command="{x:Static Designer:DesignerCanvas.MyCommand}"
Executed="DoStuff"
CanExecute="CanDoStuff" />
在我的 中ResourceDictionary.xaml
,我有一个Button
我正在ContextMenu
使用的东西Triggers
:
<Button x:Name="btnMyButton" Content="Click this">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem x:Name="myMenu" Header="MyMenuItem 1">
<MenuItem x:Name="menuItem1" Header="MySubMenuItem 1"
Command="{x:Static DesignerItems:DesignerCanvas.MyCommand}"> <<<=== Command Binding
<MenuItem.Icon>
<Image Source="myImage.png" Width="20"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
但这似乎不起作用,因为Command
在 XAML 中指定的菜单项显示为disabled
,并且调试器也没有命中CanDoStuff()
和。DoStuff()
另外,由于我没有为此使用 ViewModel,因此我无法编写如下内容:
<MenuItem Command="{Binding Path=somePathInViewModel, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}" />
我该怎么做,任何帮助将不胜感激。提前致谢。