当前位置:   article > 正文

WPF效果第二百一十二篇之MenuItem模板

wpf menuitem

最近有其他事情一直忙着,也没抽点时间去更新文章;今天来分享一下关于MenuItem的模板;本来是偷懒直接借鉴的现成的代码,结果发现一堆小问题b3d3e9514fcb67122358713d5934aafe.png;没办法还是得自己动手;满怀期待的打开布满灰尘的Blend,最终实现效果:

e7acd295a3a053e5ba585115320391b6.gif

1、前台关于MenuItem样式:

  1. <Style TargetType="{x:Type MenuItem}">
  2. <Setter Property="Background" Value="Transparent"/>
  3. <Setter Property="Foreground" Value="#FFFFFF"/>
  4. <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
  5. <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
  6. <Setter Property="FontSize" Value="20"/>
  7. <Setter Property="Height" Value="40"/>
  8. <Setter Property="Margin" Value="0,10,0,0"/>
  9. <Setter Property="Template" Value="{StaticResource SubmenuItemTemplateKey}"/>
  10. <Style.Triggers>
  11. <Trigger Property="Role" Value="SubmenuHeader">
  12. <Setter Property="Template" Value="{StaticResource SubmenuHeaderTemplateKey}"/>
  13. </Trigger>
  14. </Style.Triggers>
  15. </Style>

2、关于Role=SubmenuHeader的模板:

  1. <ControlTemplate x:Key="SubmenuHeaderTemplateKey" TargetType="{x:Type MenuItem}">
  2. <Border CornerRadius="6" Background="{TemplateBinding Background}" BorderThickness="0">
  3. <Grid SnapsToDevicePixels="true">
  4. <Grid>
  5. <Grid.ColumnDefinitions>
  6. <ColumnDefinition MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/>
  7. <ColumnDefinition Width="*"/>
  8. <ColumnDefinition Width="30"/>
  9. </Grid.ColumnDefinitions>
  10. <ContentPresenter Grid.Column="1" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True"
  11. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
  12. <Path Grid.Column="2" Width="16" Height="16" Stretch="Uniform" Data="{StaticResource RightArrow}" Fill="{TemplateBinding Foreground}"
  13. HorizontalAlignment="Left" Margin="0,0,20,0"/>
  14. </Grid>
  15. <Popup x:Name="PART_Popup" AllowsTransparency="true" HorizontalOffset="-1"
  16. IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
  17. PopupAnimation="Scroll" Placement="Right" VerticalOffset="0">
  18. <Border Margin="0,0" CornerRadius="6" Background="#3F4145" BorderBrush="#FF868585" BorderThickness="1" Width="180">
  19. <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle"
  20. Grid.IsSharedSizeScope="true" Margin="0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
  21. KeyboardNavigation.TabNavigation="Cycle"/>
  22. </Border>
  23. </Popup>
  24. </Grid>
  25. </Border>
  26. <ControlTemplate.Triggers>
  27. <MultiTrigger>
  28. <MultiTrigger.Conditions>
  29. <Condition Property="HasItems" Value="true"/>
  30. <Condition Property="IsMouseOver" Value="true"/>
  31. </MultiTrigger.Conditions>
  32. <Setter Property="IsSubmenuOpen" Value="true"/>
  33. <Setter Property="Background" Value="#3D5CE3"/>
  34. <Setter TargetName="PART_Popup" Property="IsOpen" Value="true"/>
  35. </MultiTrigger>
  36. <MultiTrigger>
  37. <MultiTrigger.Conditions>
  38. <Condition Property="HasItems" Value="true"/>
  39. <Condition Property="IsChecked" Value="true"/>
  40. <Condition Property="IsMouseOver" Value="true"/>
  41. </MultiTrigger.Conditions>
  42. <Setter Property="IsSubmenuOpen" Value="true"/>
  43. <Setter Property="Background" Value="#3D5CE3"/>
  44. <Setter TargetName="PART_Popup" Property="IsOpen" Value="true"/>
  45. </MultiTrigger>
  46. </ControlTemplate.Triggers>
  47. </ControlTemplate>

最终简单的效果先这样吧6ba7f8ebd156487326ffdfddb4f72be0.png;以后有时间的话,可以再去摸索一下更复杂的效果ae64e5de2b9640055d8df1edc868b3e3.png;编程不息、Bug不止、无Bug、无生活5df1115e254cad45e3c71958d2f26e2c.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/758423
推荐阅读
相关标签