WPF 自定义MenuItem样式
2024-08-25 16:24:50
一、前言
默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化。需要其他功能的变化,大家可以根据样式代码进行扩展。
MenuItem的样式代码:
<!--MenuItem-->
<Style TargetType="MenuItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="MenuItem">
<Grid ToolTip="{TemplateBinding Header}" Height="24" Background="#FBFBFD" Width="{TemplateBinding Width}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" />
<ColumnDefinition Width="*" MinWidth="80"/>
</Grid.ColumnDefinitions>
<Border Background="#EBEBED"/>
<Border x:Name="_border" Grid.ColumnSpan="2"/>
<Image x:Name="_imgicon" Width="12" Height="12" Stretch="Uniform" Source="{Binding Icon,RelativeSource={RelativeSource TemplatedParent}}" />
<TextBlock Foreground="#2D2D30" Grid.Column="1" Margin="5 0 15 0" VerticalAlignment="Center" x:Name="_txt" Text="{Binding Header,RelativeSource={RelativeSource TemplatedParent}}" />
<Path Visibility="Collapsed" x:Name="_path" Grid.Column="1" HorizontalAlignment="Right" Margin="5 13 5 0" Data="M0,4 4,0 0,-4 z" Fill="#7E8A92"/>
<Popup Placement="Right" x:Name="SubMenuPopup" AllowsTransparency="True" Focusable="False" IsOpen="{TemplateBinding IsSubmenuOpen}" >
<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<Border Background="#ffc787" Name="SubmenuBorder" BorderBrush="LightGray" BorderThickness="1" SnapsToDevicePixels="True" >
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" />
</Border>
</ScrollViewer>
</Popup> </Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasItems" Value="true">
<Setter TargetName="_path" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="_border" Property="Background" Value="#ffc787"/>
<Setter TargetName="_txt" Property="Foreground" Value="White"/>
<Setter TargetName="_path" Property="Fill" Value="White"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="_txt" Property="Foreground" Value="Gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
引用示例:
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="菜单一">
<MenuItem Header="子菜单"/>
</MenuItem>
<MenuItem Header="菜单二"></MenuItem>
</ContextMenu> </Grid.ContextMenu>
</Grid>
显示效果:
所有代码已经上传到github:https://github.com/cmfGit/WpfDemo.git
最新文章
- JSONModel对架构的影响及解决方案
- Kafka在Centos6.4中的集群搭建
- [DX11] Introduction
- BZOJ1393 [Ceoi2008]knights
- python简要
- 007Linux在线升级yum
- How to: Modify a Project System So That Projects Load in Multiple Versions of Visual Studio
- Microsoft Azure 全球状态
- linux重要目录说明
- HashMap源码阅读
- php coding中的一些小问题
- 安装virtualbox出现2503、2502的错误提示解决方法
- 码云IntelliJ IDEA
- MSSQL和MYSQL数据库降权
- MACD技术的高级应用--MACD与波浪
- OpenStack 单元测试
- Maven支撑下的War应用依赖另外一个WAR应用的解决方案
- linux服务器的所有服务web/dns/dhcp/vsftp-nfs-samba的配置
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments
- MD2关键桢动画3D模型加载.