首页 > 解决方案 > 覆盖 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>

任何方向将不胜感激。提前致谢!

标签: wpfxaml

解决方案


推荐阅读