我在ContextMenu
中定义了Resources
。更具体地说,此上下文菜单用于DataGrid
,并在右键单击行时显示。因此,我无法使用<DataGrid.ContextMenu>
来定义此上下文菜单,我需要这样做:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
<Setter Property="ContextMenu" Value="{StaticResource DataGridCM}" />
</Style>
</DataGrid.RowStyle>
<ContextMenu x:Key="DataGridCM"
DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.DataContext}">
<MenuItem Header="Item 1" Command="{Binding Command1}" />
<MenuItem Header="Item 2" Command="{Binding Command2}" />
<Separator />
<MenuItem Header="Other Item" Command="{Binding OtherCommand}" />
</ContextMenu>
这给了我这个错误:
A style intended for type 'MenuItem' cannot be applied to type 'Separator'.
是否有任何方法可以添加Separator
?我已经尝试过下面显示的ItemsSource
,但它仍然给了我相同的运行时错误。
<ContextMenu.ItemsSource>
<CompositeCollection>
<MenuItem Header="Item 1" Command="{Binding Command1}" />
<MenuItem Header="Item 2" Command="{Binding Command2}" />
<Separator />
<MenuItem Header="Other Item" Command="{Binding OtherCommand}" />
</CompositeCollection>
</ContextMenu.ItemsSource>
我知道如果我使用代码隐藏可以做到这一点,但我想避免这种情况,因为我使用的是MVVM。我不希望其他人在几年之后接管我的项目会让一个具有代码隐藏的View类感到困惑。有没有办法解决这个问题,可能纯粹来自XAML级别?