我想要将命令绑定到不同的MenuItems
上,在这个ContextMenu
中,我将会与一个Button
连接起来。但是,为了实现这一点,我需要在我导入的ResourceDictionary
中定义所有的命令为static
。
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
,我使用Triggers
将ContextMenu
与之连接:
<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>
但这似乎不起作用,因为在XAML中指定了命令
的菜单项被显示为禁用
,并且调试器也未触发CanDoStuff()
和DoStuff()
。另外,由于我没有使用ViewModel,所以我无法编写以下内容:
<MenuItem Command="{Binding Path=somePathInViewModel, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}" />
我该如何做到这一点,任何帮助都将不胜感激。提前感谢您的帮助。
static
类,但仍然没有成功。 - Agent007