<Window.Resources>
<ControlTemplate x:Key="MenuItemTemplate" TargetType="MenuItem">
<Grid Width="130" Height="30" Margin="0">
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#c3e0ee"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
<TextBlock Text="{TemplateBinding Header}" Width="120" Height="20" Margin="23,8,0,0"/>
</Grid>
</ControlTemplate>
</Window.Resources>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="在上方插入一行" Template="{StaticResource MenuItemTemplate}" Command="{Binding AddBeforeRow}" CommandParameter="{Binding PlacementTarget.SelectedIndex,RelativeSource={RelativeSource AncestorType=ContextMenu}}" Width="150">
</MenuItem>
<MenuItem Header="在下方插入一行" Template="{StaticResource MenuItemTemplate}" Command="{Binding AddAfterRow}" CommandParameter="{Binding PlacementTarget.SelectedIndex,RelativeSource={RelativeSource AncestorType=ContextMenu}}" Width="150">
</MenuItem>
<MenuItem Header="删除当前行" Template="{StaticResource MenuItemTemplate}" Command="{Binding DeleteCurrentRow}" CommandParameter="{Binding PlacementTarget.SelectedIndex,RelativeSource={RelativeSource AncestorType=ContextMenu}}" Width="150">
</MenuItem>
</ContextMenu>
</ListView.ContextMenu>
在上面的示例中,我们定义了名为MenuItemTemplate
的控件模板,它被应用于每个MenuItem
。您可以根据需要在模板中定义自己的布局和样式。然后,我们通过在MenuItem
中使用Template="{StaticResource MenuItemTemplate}"
来引用该模板。
这样,所有的MenuItem
都将共享相同的模板,并且您只需要在一个地方定义和管理它们的外观。