Wpf 重写MenuItem ControlTemplate会中断单击事件
我想覆盖MenuItem控件模板,以便自定义MenuItems的鼠标覆盖背景色 我正在使用以下xaml:Wpf 重写MenuItem ControlTemplate会中断单击事件,wpf,xaml,Wpf,Xaml,我想覆盖MenuItem控件模板,以便自定义MenuItems的鼠标覆盖背景色 我正在使用以下xaml: <Style TargetType="MenuItem"> <Setter Property="Background" Value="#26222b"/> <Setter Property="Height" Value="25"/> <Setter Property="BorderThickness"
<Style TargetType="MenuItem">
<Setter Property="Background" Value="#26222b"/>
<Setter Property="Height" Value="25"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="MenuItem">
<Border Padding="10 0 10 0"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}">
<ContentPresenter x:Name="ContentPresenter"
Content="{TemplateBinding Header}"
ContentSource="Header"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter Property="Background" Value="#2f2a36"/>
</Trigger>
</Style.Triggers>
</Style>
这与我所期望的风格相同,但按钮不再响应单击事件
我还尝试使用ControlTemplate.Trigger而不是Style.Trigger来进行所需的更改。我不知道哪种解决方案被认为是合适的(请让我知道),但这两种解决方案似乎都没有解决眼前的问题
我的理解是,我应该能够重写元素的样式,而不必重写其单击响应功能,因此我假设我在这里做了一些错误的事情来破坏它
为了以防万一,下面是我定义菜单本身的xaml:
<Menu Grid.Row="0"
Grid.ColumnSpan="2"
IsMainMenu="True">
<Menu.Items>
<MenuItem Header="_File" DataContext="{Binding File}">
<MenuItem Header="_New" Command="{Binding NewCommand}"/>
<MenuItem Header="_Open" Command="{Binding OpenCommand}" />
<MenuItem Header="_Save" Command="{Binding SaveCommand}"/>
<MenuItem Header="_Save as..." Command="{Binding SaveAsCommand}"/>
</MenuItem>
<MenuItem Header="_Format" DataContext="{Binding Editor}">
<MenuItem Header="_Format" Command="{Binding FormatCommand}"/>
<MenuItem Header="_Word wrap" Command="{Binding WrapCommand}"/>
</MenuItem>
<MenuItem Header="_Help" DataContext="{Binding Help}">
<MenuItem Header="_About" Command="{Binding HelpCommand}"/>
</MenuItem>
</Menu.Items>
</Menu>
任何指示都将不胜感激。提前谢谢 有关更多信息,请参阅。MenuItem模板必须正确实现,我从阅读本文中了解到,我需要覆盖所有列出的控件模板才能进行此更改?也许不是。但是当您修改模板时,您需要遵循原始模板到某一点。在您的示例中,标题有一个ContentPresenter,但是菜单项的其余部分应该显示在哪里?在文档中他们使用了弹出控件。非常感谢,实现弹出控件确实是缺少的一步。如果你写下来作为答案,我会接受的。