原文:WPF 自定义MenuItem样式

一、前言

默认的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

最新文章

  1. JSONModel对架构的影响及解决方案
  2. Kafka在Centos6.4中的集群搭建
  3. [DX11] Introduction
  4. BZOJ1393 [Ceoi2008]knights
  5. python简要
  6. 007Linux在线升级yum
  7. How to: Modify a Project System So That Projects Load in Multiple Versions of Visual Studio
  8. Microsoft Azure 全球状态
  9. linux重要目录说明
  10. HashMap源码阅读
  11. php coding中的一些小问题
  12. 安装virtualbox出现2503、2502的错误提示解决方法
  13. 码云IntelliJ IDEA
  14. MSSQL和MYSQL数据库降权
  15. MACD技术的高级应用--MACD与波浪
  16. OpenStack 单元测试
  17. Maven支撑下的War应用依赖另外一个WAR应用的解决方案
  18. linux服务器的所有服务web/dns/dhcp/vsftp-nfs-samba的配置
  19. 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments
  20. MD2关键桢动画3D模型加载.

热门文章

  1. ExpressRoute 先决条件和清单
  2. SQL Server -&gt;&gt; 调用系统内建扩展存储过程&quot;master.dbo.xp_delete_file&quot;删除过期备份文件
  3. .NET Core Web 文件分片上传,带进度条实用插件
  4. OpenGLES渲染
  5. Linux配置自动发送邮件
  6. Mosquitto安装调试实录
  7. RMAN恢复脚本案例
  8. NCE2
  9. IM——技术方案
  10. python队列