wpf – System.Windows.Controls.MenuItem没有图标区域

前端之家收集整理的这篇文章主要介绍了wpf – System.Windows.Controls.MenuItem没有图标区域前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
每当我尝试玩 WPF菜单项的外观时,我都有机会自定义标题,这基本上是一个项目的文本.

我需要的是一个黑色的菜单,白色的文本,没有“图标区域”.

||Some text http://img848.imageshack.us/img848/7622/iconarea.png

如何删除菜单项的图标区域?

谢谢.

您将需要从 here获取默认样式,并从MenuItem的控件模板中删除该区域.

对于MenuItem,您实际上可以重新定义SubmenuItemTemplateKey和SubmenuHeaderTemplateKey ControlTemplate,类似于here所述.

编辑:

背景实际上是由菜单样式呈现的.如果您搜索“MenuItemIconColumnGroup”,您将找到所有使用它的地方.

编辑:

这是一个使用黑色背景和白色前景的完整示例:

  1. <Application x:Class="DeleteMeWPF.App"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
  5. StartupUri="MainWindow.xaml">
  6. <Application.Resources>
  7.  
  8. <MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter" />
  9. <Geometry x:Key="DownArrow">M 0,0 L 3.5,4 L 7,0 Z</Geometry>
  10. <Geometry x:Key="UpArrow">M 0,4 L 3.5,0 L 7,4 Z</Geometry>
  11. <Geometry x:Key="RightArrow">M 0,0 L 4,3.5 L 0,7 Z</Geometry>
  12.  
  13. <Geometry x:Key="Checkmark">M 0,5.1 L 1.7,5.2 L 3.4,7.1 L 8,0.4 L 9.2,0 L 3.3,10.8 Z</Geometry>
  14.  
  15. <LinearGradientBrush x:Key="MenuItemSelectionFill" StartPoint="0,0" EndPoint="0,1">
  16. <LinearGradientBrush.GradientStops>
  17. <GradientStop Color="#34C5EBFF" Offset="0" />
  18. <GradientStop Color="#3481D8FF" Offset="1" />
  19. </LinearGradientBrush.GradientStops>
  20. </LinearGradientBrush>
  21. <LinearGradientBrush x:Key="MenuItemPressedFill" StartPoint="0,1">
  22. <LinearGradientBrush.GradientStops>
  23. <GradientStop Color="#28717070" Offset="0" />
  24. <GradientStop Color="#50717070" Offset="0.75" />
  25. <GradientStop Color="#90717070" Offset="1" />
  26. </LinearGradientBrush.GradientStops>
  27. </LinearGradientBrush>
  28.  
  29. <Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
  30. <Setter Property="Template">
  31. <Setter.Value>
  32. <ControlTemplate TargetType="{x:Type Separator}">
  33. <Grid SnapsToDevicePixels="true" Margin="0,6,4">
  34. <Rectangle Height="1" Margin="30,1,1" Fill="#E0E0E0" />
  35. <Rectangle Height="1" Margin="30,0" Fill="White" />
  36. </Grid>
  37. </ControlTemplate>
  38. </Setter.Value>
  39. </Setter>
  40. </Style>
  41.  
  42. <ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement},ResourceId=SubmenuContent}"
  43. TargetType="{x:Type ContentControl}">
  44. <Border Background="Black" BorderBrush="#FF959595" BorderThickness="1">
  45. <ContentPresenter Grid.ColumnSpan="2" Margin="1,0" />
  46. </Border>
  47. </ControlTemplate>
  48.  
  49. <ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem},ResourceId=TopLevelItemTemplateKey}"
  50. TargetType="{x:Type MenuItem}">
  51. <Grid SnapsToDevicePixels="true">
  52. <Rectangle x:Name="OuterBorder" RadiusX="2" RadiusY="2" />
  53. <Rectangle Name="Bg" Margin="1" Fill="{TemplateBinding MenuItem.Background}" Stroke="{TemplateBinding MenuItem.BorderBrush}"
  54. StrokeThickness="1" RadiusX="1" RadiusY="1" />
  55. <Rectangle x:Name="InnerBorder" Margin="2" />
  56. <DockPanel>
  57. <ContentPresenter x:Name="Icon" Margin="4,0" VerticalAlignment="Center" ContentSource="Icon"
  58. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  59. <Path x:Name="GlyPHPanel" Margin="7,0" Visibility="Collapsed" VerticalAlignment="Center"
  60. Fill="{TemplateBinding MenuItem.Foreground}" FlowDirection="LeftToRight" Data="{StaticResource Checkmark}" />
  61. <ContentPresenter ContentSource="Header" Margin="{TemplateBinding MenuItem.Padding}" RecognizesAccessKey="True"
  62. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  63. </DockPanel>
  64. </Grid>
  65. <ControlTemplate.Triggers>
  66. <Trigger Property="Icon" Value="{x:Null}">
  67. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  68. </Trigger>
  69. <Trigger Property="IsChecked" Value="true">
  70. <Setter TargetName="GlyPHPanel" Property="Visibility" Value="Visible" />
  71. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  72. </Trigger>
  73. <Trigger Property="IsHighlighted" Value="true">
  74. <Setter TargetName="Bg" Property="Stroke" Value="#90717070" />
  75. <Setter TargetName="OuterBorder" Property="Stroke" Value="#50FFFFFF" />
  76. <Setter TargetName="InnerBorder" Property="Stroke" Value="#50FFFFFF" />
  77.  
  78. </Trigger>
  79. <Trigger Property="IsKeyboardFocused" Value="true">
  80. <Setter TargetName="Bg" Property="Stroke" Value="#E0717070" />
  81. <Setter TargetName="Bg" Property="Fill" Value="{StaticResource MenuItemPressedFill}" />
  82. <Setter TargetName="InnerBorder" Property="Stroke" Value="#50747272" />
  83. </Trigger>
  84. <Trigger Property="IsEnabled" Value="false">
  85. <Setter Property="Foreground" Value="#FF9A9A9A" />
  86. <Setter TargetName="GlyPHPanel" Property="Fill" Value="#848589" />
  87. </Trigger>
  88. </ControlTemplate.Triggers>
  89. </ControlTemplate>
  90. <ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem},ResourceId=TopLevelHeaderTemplateKey}"
  91. TargetType="{x:Type MenuItem}">
  92. <Grid SnapsToDevicePixels="true">
  93. <Rectangle x:Name="OuterBorder" RadiusX="2" RadiusY="2" />
  94. <Rectangle Name="Bg" Margin="1" Fill="{TemplateBinding MenuItem.Background}" Stroke="{TemplateBinding MenuItem.BorderBrush}"
  95. StrokeThickness="1" RadiusX="1" RadiusY="1" />
  96. <Rectangle x:Name="InnerBorder" Margin="2" />
  97. <DockPanel>
  98. <ContentPresenter x:Name="Icon" Margin="4,0" Visibility="Collapsed" VerticalAlignment="Center"
  99. Fill="{TemplateBinding MenuItem.Foreground}" FlowDirection="LeftToRight" Data="{StaticResource Checkmark}" />
  100. <ContentPresenter ContentSource="Header" Margin="{TemplateBinding MenuItem.Padding}" RecognizesAccessKey="True"
  101. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  102. </DockPanel>
  103. <Popup x:Name="PART_Popup" HorizontalOffset="1" VerticalOffset="-1" AllowsTransparency="true" Placement="Bottom"
  104. IsOpen="{Binding Path=IsSubmenuOpen,RelativeSource={RelativeSource TemplatedParent}}" Focusable="false"
  105. PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
  106. <theme:SystemDropShadowChrome Name="Shdw" Color="Transparent">
  107. <ContentControl Name="SubMenuBorder"
  108. Template="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement},ResourceId=SubmenuContent}}"
  109. IsTabStop="false">
  110. <ScrollViewer CanContentScroll="true"
  111. Style="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type FrameworkElement},ResourceId=MenuScrollViewer}}">
  112. <ItemsPresenter Margin="2" KeyboardNavigation.TabNavigation="Cycle"
  113. KeyboardNavigation.DirectionalNavigation="Cycle"
  114. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Grid.IsSharedSizeScope="true" />
  115. </ScrollViewer>
  116. </ContentControl>
  117. </theme:SystemDropShadowChrome>
  118. </Popup>
  119. </Grid>
  120. <ControlTemplate.Triggers>
  121. <Trigger Property="IsSuspendingPopupAnimation" Value="true">
  122. <Setter TargetName="PART_Popup" Property="PopupAnimation" Value="None" />
  123. </Trigger>
  124. <Trigger Property="Icon" Value="{x:Null}">
  125. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  126. </Trigger>
  127. <Trigger Property="IsChecked" Value="true">
  128. <Setter TargetName="GlyPHPanel" Property="Visibility" Value="Visible" />
  129. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  130. </Trigger>
  131. <Trigger SourceName="PART_Popup" Property="Popup.HasDropShadow" Value="true">
  132. <Setter TargetName="Shdw" Property="Margin" Value="0,5,5" />
  133. <Setter TargetName="Shdw" Property="Color" Value="#71000000" />
  134. </Trigger>
  135. <Trigger Property="IsHighlighted" Value="true">
  136. <Setter TargetName="Bg" Property="Stroke" Value="#90717070" />
  137. <Setter TargetName="OuterBorder" Property="Stroke" Value="#50FFFFFF" />
  138. <Setter TargetName="InnerBorder" Property="Stroke" Value="#50FFFFFF" />
  139. </Trigger>
  140. <Trigger Property="IsKeyboardFocused" Value="true">
  141. <Setter TargetName="Bg" Property="Stroke" Value="#E0717070" />
  142. <Setter TargetName="Bg" Property="Fill" Value="{StaticResource MenuItemPressedFill}" />
  143. <Setter TargetName="InnerBorder" Property="Stroke" Value="#50747272" />
  144. </Trigger>
  145. <Trigger Property="IsSubmenuOpen" Value="true">
  146. <Setter TargetName="Bg" Property="Stroke" Value="#E0717070" />
  147. <Setter TargetName="Bg" Property="Fill" Value="{StaticResource MenuItemPressedFill}" />
  148. <Setter TargetName="InnerBorder" Property="Stroke" Value="#50747272" />
  149. </Trigger>
  150. <Trigger Property="IsEnabled" Value="false">
  151. <Setter Property="Foreground" Value="#FF9A9A9A" />
  152. <Setter TargetName="GlyPHPanel" Property="Fill" Value="#848589" />
  153. </Trigger>
  154. </ControlTemplate.Triggers>
  155. </ControlTemplate>
  156. <ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem},ResourceId=SubmenuItemTemplateKey}"
  157. TargetType="{x:Type MenuItem}">
  158. <Grid SnapsToDevicePixels="true">
  159. <Rectangle Name="Bg" Fill="{TemplateBinding MenuItem.Background}" Stroke="{TemplateBinding MenuItem.BorderBrush}"
  160. StrokeThickness="1" RadiusX="2" RadiusY="2" />
  161. <Rectangle x:Name="InnerBorder" Margin="1" RadiusX="2" RadiusY="2" />
  162. <Grid>
  163. <Grid.ColumnDefinitions>
  164. <ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIconColumnGroup" />
  165. <ColumnDefinition Width="4" />
  166. <ColumnDefinition Width="*" />
  167. <ColumnDefinition Width="37" />
  168. <ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIGTColumnGroup" />
  169. <ColumnDefinition Width="17" />
  170. </Grid.ColumnDefinitions>
  171. <ContentPresenter x:Name="Icon" Margin="1" VerticalAlignment="Center" ContentSource="Icon"
  172. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  173. <Border x:Name="GlyPHPanel" Background="#E6EFF4" BorderBrush="#CDD3E6" BorderThickness="1" CornerRadius="3" Margin="1"
  174. Visibility="Collapsed" Width="22" Height="22">
  175. <Path Name="Glyph" Width="9" Height="11" Fill="#0C12A1" FlowDirection="LeftToRight"
  176. Data="{StaticResource Checkmark}" />
  177. </Border>
  178. <ContentPresenter Grid.Column="2" ContentSource="Header" Margin="{TemplateBinding MenuItem.Padding}"
  179. RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  180. <TextBlock Grid.Column="4" Text="{TemplateBinding MenuItem.InputGestureText}"
  181. Margin="{TemplateBinding MenuItem.Padding}" />
  182. </Grid>
  183. </Grid>
  184. <ControlTemplate.Triggers>
  185. <Trigger Property="Icon" Value="{x:Null}">
  186. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  187. </Trigger>
  188. <Trigger Property="IsChecked" Value="true">
  189. <Setter TargetName="GlyPHPanel" Property="Visibility" Value="Visible" />
  190. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  191. </Trigger>
  192. <Trigger Property="IsHighlighted" Value="true">
  193. <Setter TargetName="Bg" Property="Fill" Value="{StaticResource MenuItemSelectionFill}" />
  194. <Setter TargetName="Bg" Property="Stroke" Value="#8071CBF1" />
  195. <Setter TargetName="InnerBorder" Property="Stroke" Value="#40FFFFFF" />
  196. </Trigger>
  197. <Trigger Property="IsEnabled" Value="false">
  198. <Setter Property="Foreground" Value="#FF9A9A9A" />
  199. <Setter TargetName="GlyPHPanel" Property="Background" Value="#EEE9E9" />
  200. <Setter TargetName="GlyPHPanel" Property="BorderBrush" Value="#DBD6D6" />
  201. <Setter TargetName="Glyph" Property="Fill" Value="#848589" />
  202. </Trigger>
  203. </ControlTemplate.Triggers>
  204. </ControlTemplate>
  205. <ControlTemplate x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem},ResourceId=SubmenuHeaderTemplateKey}"
  206. TargetType="{x:Type MenuItem}">
  207. <Grid SnapsToDevicePixels="true">
  208. <Rectangle Name="Bg" Fill="{TemplateBinding MenuItem.Background}" Stroke="{TemplateBinding MenuItem.BorderBrush}"
  209. StrokeThickness="1" RadiusX="2" RadiusY="2" />
  210. <Rectangle x:Name="InnerBorder" Margin="1" Stroke="Transparent" StrokeThickness="1" RadiusX="2" RadiusY="2" />
  211. <Grid>
  212. <Grid.ColumnDefinitions>
  213. <ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIconColumnGroup" />
  214. <ColumnDefinition Width="4" />
  215. <ColumnDefinition Width="*" />
  216. <ColumnDefinition Width="37" />
  217. <ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIGTColumnGroup" />
  218. <ColumnDefinition Width="17" />
  219. </Grid.ColumnDefinitions>
  220. <ContentPresenter x:Name="Icon" Margin="1" VerticalAlignment="Center" ContentSource="Icon"
  221. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  222. <Border x:Name="GlyPHPanel" Background="#E6EFF4" BorderBrush="#CDD3E6" BorderThickness="1" CornerRadius="3" Margin="1"
  223. Visibility="Collapsed" Width="22" Height="22">
  224. <Path Name="Glyph" Width="9" Height="11" Fill="#0C12A1" FlowDirection="LeftToRight"
  225. Data="{StaticResource Checkmark}" />
  226. </Border>
  227. <ContentPresenter Grid.Column="2" ContentSource="Header" Margin="{TemplateBinding MenuItem.Padding}"
  228. RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  229. <TextBlock Grid.Column="4" Text="{TemplateBinding MenuItem.InputGestureText}"
  230. Margin="{TemplateBinding MenuItem.Padding}" Visibility="Collapsed" />
  231. <Path Grid.Column="5" VerticalAlignment="Center" Margin="4,0" Fill="{TemplateBinding MenuItem.Foreground}"
  232. Data="{StaticResource RightArrow}" />
  233. </Grid>
  234. <Popup x:Name="PART_Popup" AllowsTransparency="true" Placement="Right" VerticalOffset="-3" HorizontalOffset="-2"
  235. IsOpen="{Binding Path=IsSubmenuOpen,ResourceId=MenuScrollViewer}}">
  236. <ItemsPresenter Margin="2" KeyboardNavigation.TabNavigation="Cycle"
  237. KeyboardNavigation.DirectionalNavigation="Cycle"
  238. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Grid.IsSharedSizeScope="true" />
  239. </ScrollViewer>
  240. </ContentControl>
  241. </theme:SystemDropShadowChrome>
  242. </Popup>
  243. </Grid>
  244. <ControlTemplate.Triggers>
  245. <Trigger Property="IsSuspendingPopupAnimation" Value="true">
  246. <Setter TargetName="PART_Popup" Property="PopupAnimation" Value="None" />
  247. </Trigger>
  248. <Trigger Property="IsHighlighted" Value="true">
  249. <Setter TargetName="InnerBorder" Property="Stroke" Value="#D1DBF4FF" />
  250. </Trigger>
  251. <Trigger Property="Icon" Value="{x:Null}">
  252. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  253. </Trigger>
  254. <Trigger Property="IsChecked" Value="true">
  255. <Setter TargetName="GlyPHPanel" Property="Visibility" Value="Visible" />
  256. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
  257. </Trigger>
  258. <Trigger SourceName="PART_Popup" Property="Popup.HasDropShadow" Value="true">
  259. <Setter TargetName="Shdw" Property="Margin" Value="0,5" />
  260. <Setter TargetName="Shdw" Property="Color" Value="#71000000" />
  261. </Trigger>
  262. <Trigger Property="IsHighlighted" Value="true">
  263. <Setter TargetName="Bg" Property="Fill" Value="{StaticResource MenuItemSelectionFill}" />
  264. <Setter TargetName="Bg" Property="Stroke" Value="#8571CBF1" />
  265. </Trigger>
  266. <Trigger Property="IsEnabled" Value="false">
  267. <Setter Property="Foreground" Value="#FF9A9A9A" />
  268. <Setter TargetName="GlyPHPanel" Property="Background" Value="#EEE9E9" />
  269. <Setter TargetName="GlyPHPanel" Property="BorderBrush" Value="#DBD6D6" />
  270. <Setter TargetName="Glyph" Property="Fill" Value="#848589" />
  271. </Trigger>
  272. </ControlTemplate.Triggers>
  273. </ControlTemplate>
  274. <Style TargetType="{x:Type MenuItem}">
  275. <Setter Property="OverridesDefaultStyle" Value="true" />
  276. <Setter Property="HorizontalContentAlignment"
  277. Value="{Binding Path=HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
  278. <Setter Property="VerticalContentAlignment"
  279. Value="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
  280. <Setter Property="Background" Value="Transparent" />
  281. <Setter Property="Template"
  282. Value="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem},ResourceId=SubmenuItemTemplateKey}}" />
  283. <Style.Triggers>
  284. <Trigger Property="Role" Value="TopLevelHeader">
  285. <Setter Property="Padding" Value="7,2,8,3" />
  286. <Setter Property="Template"
  287. Value="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type MenuItem},ResourceId=TopLevelHeaderTemplateKey}}" />
  288. </Trigger>
  289. <Trigger Property="Role" Value="TopLevelItem">
  290. <Setter Property="Padding" Value="7,ResourceId=TopLevelItemTemplateKey}}" />
  291. </Trigger>
  292. <Trigger Property="Role" Value="SubmenuHeader">
  293. <Setter Property="Padding" Value="2,3,ResourceId=SubmenuHeaderTemplateKey}}" />
  294. </Trigger>
  295. <Trigger Property="Role" Value="SubmenuItem">
  296. <Setter Property="Padding" Value="2,3" />
  297. </Trigger>
  298. </Style.Triggers>
  299. </Style>
  300.  
  301. <Style TargetType="{x:Type Menu}">
  302. <Setter Property="OverridesDefaultStyle" Value="true" />
  303. <Setter Property="Background" Value="Black" />
  304. <Setter Property="FontFamily" Value="{DynamicResource {x:Static SystemFonts.MenuFontFamilyKey}}" />
  305. <Setter Property="FontSize" Value="{DynamicResource {x:Static SystemFonts.MenuFontSizeKey}}" />
  306. <Setter Property="FontStyle" Value="{DynamicResource {x:Static SystemFonts.MenuFontStyleKey}}" />
  307. <Setter Property="FontWeight" Value="{DynamicResource {x:Static SystemFonts.MenuFontWeightKey}}" />
  308. <Setter Property="Foreground" Value="White" />
  309. <Setter Property="Template">
  310. <Setter.Value>
  311. <ControlTemplate TargetType="{x:Type Menu}">
  312. <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
  313. BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"
  314. SnapsToDevicePixels="true">
  315. <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  316. </Border>
  317. </ControlTemplate>
  318. </Setter.Value>
  319. </Setter>
  320. </Style>
  321.  
  322. </Application.Resources>
  323. </Application>

猜你在找的Windows相关文章