在尝试将Command
绑定到我的程序中的MenuItem
时,我发现Commands
与MenuItems
不一样,与其他控件一样。我一直在使用this帖子作为指导,但到目前为止还没有运气。基本上我的目标是在点击Command
时运行MenuItem
。
这是我看过前面提到的帖子之后的xaml。我的Command
名为CreateFiles
:
<MenuItem Header="{DynamicResource save}" Command="{Binding Path=PlacementTarget.DataContext.CreateFiles, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
我的Command
是在窗口的ViewModel中创建的,并且被声明为正常,但无论如何我都会发布它:
private ICommand _createFiles;
public MainWindowViewModel()
{
_createFiles = new Command(createFiles_Operations);
}
public ICommand CreateFiles { get { return _createFiles; } }
private void createFiles_Operations()
{
}
为了测试我的Command
是否正常工作,我在第一个支持者处设置了一个断点。到目前为止,当点击MenuItem
时,程序并没有在此断点处停止。
由于此方法似乎不起作用,我该怎么做才能使Commands
与MenuItems
一起使用?
更新: Command
已更改为ICommand
更新2: ContextMenu
&amp; Button
xaml:
<Button Click="Button_Click_1" Margin="5,4,0,0" Name="Button_1" Height="55" VerticalAlignment="Top" HorizontalAlignment="Left" Width="55" BorderBrush="Black">...
<ContextMenu x:Name="MainContextMenu" MouseLeave="ContextMenuMouseLeave" Background="White" BorderBrush="#FF959595" SnapsToDevicePixels="False">...
答案 0 :(得分:0)
您需要将Mode of RelativeSource
设置为FindAncestor
才能获得ContextMenu
:
<MenuItem Header="{DynamicResource save}"
Command="{Binding Path=PlacementTarget.DataContext.CreateFiles,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=ContextMenu}}" />
您已设置PlacementRectangle
属性以引用其自身,即ContextMenu
。不要设置该属性, ContextMenuService
在内部将PlacementRectangle
设置为应用它的元素(在您的情况下,它将是Button)。
从ContextMenu中删除此PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}"
。
应该是:
<ContextMenu x:Name="MainContextMenu"
MouseLeave="ContextMenuMouseLeave" Background="White"
BorderBrush="#FF959595" SnapsToDevicePixels="False">