wpf - 覆盖 MenuItem ControlTemplate 中断点击事件
问题描述
我想覆盖 MenuItem ControlTemplate,以便我可以自定义 MenuItems 的鼠标悬停背景颜色。
我正在使用以下 xaml:
<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>
任何方向将不胜感激。提前致谢!
解决方案
推荐阅读
- php - 如何在 PHP 上显示 SQLite3 查询的结果并保存
- sip - SIP 重新邀请和用户=电话
- python - 无法在另一个函数中以正确的方式打印名称
- xero-api - 支持在 Xero API 中创建、更新和删除重复发票的端点
- java - CompletableFuture thenCompose VS thenComposeAsync
- google-maps - 为同一服务器上的网站使用多个 Google 地图帐户
- node.js - 动态准备好的语句有意义吗?
- mysql - sql语句不工作出现错误
- vba - VBA循环遍历一行以查找包含单元格的值并删除该列之前的列
- sql - 查找 SQL 表中的最低递归