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
のどちらもデバッガーにヒットしていないため、これは機能していないようです。また、私はこれにViewModelを使用していないため、次のようなものを書くことができません:CanDoStuff()
DoStuff()
<MenuItem Command="{Binding Path=somePathInViewModel, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}" />
どうすればこれを行うことができますか、どんな助けでも大歓迎です。前もって感謝します。