WPF MenuItem 样式表控制
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 的背景色。
原文地址: https://www.cveoy.top/t/topic/bsUo 著作权归作者所有。请勿转载和采集!