WPF MenuItem 样式包括菜单项的背景色、字体颜色、字体大小、边框、鼠标悬停效果、选中效果等。以下是一个示例:

<Style x:Key="MenuItemStyle" TargetType="{x:Type MenuItem}">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="FontFamily" Value="Arial"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="#999"/>
    <Setter Property="Padding" Value="10,5"/>
    <Setter Property="Margin" Value="5,5"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type MenuItem}">
                <Border Name="Border" 
                        Background="{TemplateBinding Background}" 
                        BorderThickness="{TemplateBinding BorderThickness}" 
                        BorderBrush="{TemplateBinding BorderBrush}">
                    <Grid>
                        <ContentPresenter x:Name="HeaderHost" 
                                          Margin="{TemplateBinding Padding}" 
                                          ContentSource="Header" 
                                          RecognizesAccessKey="True"/>
                        <Popup Name="SubMenuPopup" 
                               Placement="Right" 
                               IsOpen="{Binding Path=IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" 
                               AllowsTransparency="True" 
                               Focusable="False">
                            <Border Name="SubMenuBorder" 
                                    Background="#FFF" 
                                    BorderThickness="1" 
                                    BorderBrush="#888">
                                <ScrollViewer Name="SubMenuScrollViewer" 
                                              HorizontalScrollBarVisibility="Disabled" 
                                              VerticalScrollBarVisibility="Auto" 
                                              CanContentScroll="True" 
                                              Height="Auto" 
                                              Width="Auto">
                                    <StackPanel IsItemsHost="True" 
                                                KeyboardNavigation.DirectionalNavigation="Cycle"/>
                                </ScrollViewer>
                            </Border>
                        </Popup>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsHighlighted" Value="True">
                        <Setter TargetName="HeaderHost" Property="TextBlock.Foreground" Value="White"/>
                        <Setter TargetName="HeaderHost" Property="TextBlock.Background" Value="#333"/>
                        <Setter TargetName="SubMenuBorder" Property="Background" Value="#333"/>
                        <Setter TargetName="SubMenuBorder" Property="BorderBrush" Value="#888"/>
                    </Trigger>
                    <Trigger Property="IsSubmenuOpen" Value="True">
                        <Setter TargetName="SubMenuPopup" Property="Popup.IsOpen" Value="True"/>
                        <Setter TargetName="HeaderHost" Property="TextBlock.Background" Value="#555"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

此样式定义了以下属性:

  • 前景色为黑色,字体大小为14px,字体为Arial。
  • 背景色为白色,边框厚度为1,边框颜色为#999。
  • 内边距为10px的水平和5px的垂直边距,外边距为5px的水平和5px的垂直边距。
  • 使用一个名为 Border 的 Border 元素包装菜单项的内容。Border 元素具有与 MenuItem 相同的 Background、BorderThickness 和 BorderBrush 属性。在 Border 元素中,使用 Grid 元素包含一个 ContentPresenter 和一个 Popup 元素。
  • ContentPresenter 显示 MenuItem 的 Header 属性。Popup 元素用于显示菜单项的子菜单(如果有)。
  • 使用 ControlTemplate.Triggers 定义鼠标悬停和选中效果。如果菜单项被鼠标悬停,则更改 HeaderHost 的前景色、背景色和子菜单的边框颜色。如果菜单项的子菜单打开,则将 Popup 的 IsOpen 属性设置为 true,并更改 HeaderHost 的背景色。
WPF MenuItem 样式表控制

原文地址: https://www.cveoy.top/t/topic/bsUo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录