_wpf 右键菜单">
当前位置:   article > 正文

WPF右键菜单及样式_wpf 右键菜单

wpf 右键菜单

WPF中的右键菜单主要是通过ContextMenu来实现,ContextMenu的使用有两种方式

一、.在Resources中声明,在控件中使用。

1.在Resources中添加ContextMenu

  1. <Window.Resources>
  2. <ContextMenu x:Key="ContextMenu">
  3. <MenuItem Name="MiFullScreen" Header="全屏"/>
  4. <Separator></Separator>
  5. <MenuItem Name="MiPlay" Header="播放"/>
  6. </ContextMenu>
  7. </Window.Resources>

2.在控件中使用ContextMenu

定义在哪些地方使用右键,在需要使用此右键菜单的属性上添加:ContextMenu="{StaticResource ContextMenu}"

  1. <ListBox ContextMenu="{StaticResource ContextMenu}">
  2. </ListBox>

3.为每个MenuItem写Click事件

  1. <Window.Resources>
  2. <ContextMenu x:Key="ContextMenu">
  3. <MenuItem Name="NewFile" Click="NewFile_Click" Header="新建文件夹"/>
  4. <Separator></Separator>
  5. <MenuItem Name="Refresh" Click="Refresh_Click" Header="刷新"/>
  6. </ContextMenu>
  7. </Window.Resources>

次方法的优点在于只声明一次,可以在多个控件中同时使用

二、在控件中直接声明

  1. <ListBox >
  2. <ListBox.ContextMenu>
  3. <ContextMenu>
  4. <MenuItem Name="MenuItem1" Header="文件" Tag="{Binding Path=SelectdIndex" Click="MenuItem1_Click"/>
  5. <MenuItem Name="MenuItem2" Header="编辑" Tag="{Binding Path=SelectdIndex" Click="MenuItem1_Click"/>
  6. </ContextMenu>
  7. </ListBox.ContextMenu>
  8. </ListBox>

这些style包含了contexrMenu和MenuItem的内容,你可以改变其中的某项内容来达到你的要求。

  1. <!--自定义ContextMenu的外观样式-->
  2. <Style TargetType="{x:Type ContextMenu}">
  3. <Setter Property="SnapsToDevicePixels" Value="True"/>
  4. <Setter Property="OverridesDefaultStyle" Value="True"/>
  5. <Setter Property="Grid.IsSharedSizeScope" Value="True"/>
  6. <Setter Property ="Focusable" Value="False"/>
  7. <Setter Property="HasDropShadow" Value="True"/>
  8. <Setter Property="Template">
  9. <Setter.Value>
  10. <ControlTemplate TargetType="{x:Type ContextMenu}">
  11. <Border
  12. Name="Border"
  13. Background="#6EA0B0"
  14. BorderBrush="#888888"
  15. BorderThickness="1" >
  16. <StackPanel IsItemsHost="True"
  17. KeyboardNavigation.DirectionalNavigation="Cycle"/>
  18. </Border>
  19. <ControlTemplate.Triggers>
  20. <Trigger Property="HasDropShadow" Value="true">
  21. <Setter TargetName="Border" Property="Padding" Value="0,3,0,3"/>
  22. <Setter TargetName="Border" Property="CornerRadius" Value="4"/>
  23. </Trigger>
  24. </ControlTemplate.Triggers>
  25. </ControlTemplate>
  26. </Setter.Value>
  27. </Setter>
  28. </Style>
  29. <!--自定义菜单项之间的分隔符的样式-->
  30. <Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
  31. <Setter Property="Height" Value="1"/>
  32. <Setter Property="Margin" Value="0,4,0,4"/>
  33. <Setter Property="Template">
  34. <Setter.Value>
  35. <ControlTemplate TargetType="{x:Type Separator}">
  36. <Border BorderBrush="#888888" BorderThickness="1"/>
  37. </ControlTemplate>
  38. </Setter.Value>
  39. </Setter>
  40. </Style>
  41. <!-- TopLevelHeader -->
  42. <ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
  43. <Border Name="Border" >
  44. <Grid>
  45. <ContentPresenter
  46. Margin="6,3,6,3"
  47. ContentSource="Header"
  48. RecognizesAccessKey="True" />
  49. <Popup
  50. Name="Popup"
  51. Placement="Bottom"
  52. IsOpen="{TemplateBinding IsSubmenuOpen}"
  53. AllowsTransparency="True"
  54. Focusable="False"
  55. PopupAnimation="Slide">
  56. <Border
  57. Name="SubmenuBorder"
  58. SnapsToDevicePixels="True"
  59. Background="#FFFFFF"
  60. BorderBrush="#888888"
  61. BorderThickness="1" >
  62. <StackPanel
  63. IsItemsHost="True"
  64. KeyboardNavigation.DirectionalNavigation="Cycle" />
  65. </Border>
  66. </Popup>
  67. </Grid>
  68. </Border>
  69. <ControlTemplate.Triggers>
  70. <Trigger Property="IsSuspendingPopupAnimation" Value="true">
  71. <Setter TargetName="Popup" Property="PopupAnimation" Value="None"/>
  72. </Trigger>
  73. <Trigger Property="IsHighlighted" Value="true">
  74. <Setter TargetName="Border" Property="Background" Value="Green"/>
  75. <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/>
  76. </Trigger>
  77. <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="True">
  78. <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="0,0,4,4"/>
  79. <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,0,0,3"/>
  80. </Trigger>
  81. <Trigger Property="IsEnabled" Value="False">
  82. <Setter Property="Foreground" Value="#888888"/>
  83. </Trigger>
  84. </ControlTemplate.Triggers>
  85. </ControlTemplate>
  86. <!-- TopLevelItem -->
  87. <ControlTemplate
  88. x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}"
  89. TargetType="{x:Type MenuItem}">
  90. <Border Name="Border" >
  91. <Grid>
  92. <ContentPresenter
  93. Margin="20,3,6,10"
  94. ContentSource="Header"
  95. RecognizesAccessKey="True" />
  96. </Grid>
  97. </Border>
  98. <ControlTemplate.Triggers>
  99. <Trigger Property="IsHighlighted" Value="true">
  100. <Setter TargetName="Border" Property="Background" Value="Blue"/>
  101. <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/>
  102. </Trigger>
  103. <Trigger Property="IsEnabled" Value="False">
  104. <Setter Property="Foreground" Value="#888888"/>
  105. </Trigger>
  106. </ControlTemplate.Triggers>
  107. </ControlTemplate>
  108. <!-- SubmenuItem 自定义菜单项的外观样式-->
  109. <ControlTemplate
  110. x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}"
  111. TargetType="{x:Type MenuItem}">
  112. <Border Name="Border" >
  113. <Grid >
  114. <Grid.ColumnDefinitions>
  115. <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/>
  116. <ColumnDefinition Width="*" />
  117. <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/>
  118. <ColumnDefinition Width="13"/>
  119. </Grid.ColumnDefinitions>
  120. <ContentPresenter
  121. Name="Icon"
  122. Margin="6,2,6,2"
  123. HorizontalAlignment="Stretch"
  124. VerticalAlignment="Stretch"
  125. ContentSource="Icon"/>
  126. <Border
  127. Name="Check"
  128. Width="13" Height="13"
  129. Visibility="Hidden"
  130. Margin="6,0,6,0"
  131. Background="#C0C0C0"
  132. BorderThickness="1"
  133. BorderBrush="#404040">
  134. <Path
  135. Name="CheckMark"
  136. Width="7" Height="7"
  137. Visibility="Visible"
  138. SnapsToDevicePixels="False"
  139. Stroke="#404040"
  140. StrokeThickness="1"
  141. Data="M 0 0 L 7 7 M 0 7 L 7 0" />
  142. </Border>
  143. <ContentPresenter
  144. Name="HeaderHost"
  145. Grid.Column="1"
  146. ContentSource="Header"
  147. RecognizesAccessKey="True"/>
  148. <TextBlock x:Name="InputGestureText"
  149. Grid.Column="2"
  150. Background="Green"
  151. Text="{TemplateBinding InputGestureText}"
  152. Margin="5,2,0,2"
  153. DockPanel.Dock="Right" />
  154. </Grid>
  155. </Border>
  156. <ControlTemplate.Triggers>
  157. <Trigger Property="Icon" Value="{x:Null}">
  158. <Setter TargetName="Icon" Property="Visibility" Value="Hidden"/>
  159. </Trigger>
  160. <Trigger Property="IsChecked" Value="true">
  161. <Setter TargetName="CheckMark" Property="Visibility" Value="Visible"/>
  162. </Trigger>
  163. <Trigger Property="IsCheckable" Value="true">
  164. <Setter TargetName="Check" Property="Visibility" Value="Hidden"/>
  165. <Setter TargetName="Icon" Property="Visibility" Value="Hidden"/>
  166. </Trigger>
  167. <!--选中菜单项时的高亮颜色的trigger设置-->
  168. <Trigger Property="IsHighlighted" Value="true">
  169. <Setter TargetName="Border" Property="Background" Value="Green"/>
  170. </Trigger>
  171. <Trigger Property="IsEnabled" Value="false">
  172. <Setter Property="Foreground" Value="Yellow"/>
  173. </Trigger>
  174. </ControlTemplate.Triggers>
  175. </ControlTemplate>
  176. <!-- SubmenuHeader -->
  177. <ControlTemplate
  178. x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}"
  179. TargetType="{x:Type MenuItem}">
  180. <Border Name="Border" >
  181. <Grid>
  182. <Grid.ColumnDefinitions>
  183. <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/>
  184. <ColumnDefinition Width="*" />
  185. <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/>
  186. <ColumnDefinition Width="13"/>
  187. </Grid.ColumnDefinitions>
  188. <ContentPresenter
  189. Name="Icon"
  190. Margin="6,0,6,0"
  191. HorizontalAlignment="Stretch"
  192. VerticalAlignment="Stretch"
  193. ContentSource="Icon"/>
  194. <ContentPresenter
  195. Name="HeaderHost"
  196. Grid.Column="1"
  197. ContentSource="Header"
  198. RecognizesAccessKey="True"/>
  199. <TextBlock x:Name="InputGestureText"
  200. Grid.Column="2"
  201. Text="{TemplateBinding InputGestureText}"
  202. Margin="5,2,2,2"
  203. DockPanel.Dock="Right"/>
  204. <Path
  205. Grid.Column="3"
  206. HorizontalAlignment="Center"
  207. VerticalAlignment="Center"
  208. Data="M 0 0 L 0 7 L 4 3.5 Z"
  209. Fill="#404040" />
  210. <Popup
  211. Name="Popup"
  212. Placement="Left"
  213. HorizontalOffset="-4"
  214. IsOpen="{TemplateBinding IsSubmenuOpen}"
  215. AllowsTransparency="True"
  216. Focusable="False"
  217. PopupAnimation="Slide">
  218. <Border
  219. Name="SubmenuBorder"
  220. SnapsToDevicePixels="True"
  221. Background="#FFFFFF"
  222. BorderBrush="#888888"
  223. BorderThickness="1" >
  224. <StackPanel
  225. IsItemsHost="True"
  226. KeyboardNavigation.DirectionalNavigation="Cycle" />
  227. </Border>
  228. </Popup>
  229. </Grid>
  230. </Border>
  231. <ControlTemplate.Triggers>
  232. <Trigger Property="Icon" Value="{x:Null}">
  233. <Setter TargetName="Icon" Property="Visibility" Value="Collapsed"/>
  234. </Trigger>
  235. <Trigger Property="IsHighlighted" Value="true">
  236. <Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
  237. </Trigger>
  238. <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="True">
  239. <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="4"/>
  240. <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,3,0,3"/>
  241. </Trigger>
  242. <Trigger Property="IsEnabled" Value="false">
  243. <Setter Property="Foreground" Value="#888888"/>
  244. </Trigger>
  245. </ControlTemplate.Triggers>
  246. </ControlTemplate>
  247. <!-- MenuItem Style -->
  248. <Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
  249. <Setter Property="OverridesDefaultStyle" Value="True"/>
  250. <Style.Triggers>
  251. <Trigger Property="Role" Value="TopLevelHeader">
  252. <Setter Property="Template" Value="{StaticResource {x:Static MenuItem.TopLevelHeaderTemplateKey}}"/>
  253. <Setter Property="Grid.IsSharedSizeScope" Value="true"/>
  254. </Trigger>
  255. <Trigger Property="Role" Value="TopLevelItem">
  256. <Setter Property="Template" Value="{StaticResource {x:Static MenuItem.TopLevelItemTemplateKey}}"/>
  257. </Trigger>
  258. <Trigger Property="Role" Value="SubmenuHeader">
  259. <Setter Property="Template" Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}"/>
  260. </Trigger>
  261. <Trigger Property="Role" Value="SubmenuItem">
  262. <Setter Property="Template" Value="{StaticResource {x:Static MenuItem.SubmenuItemTemplateKey}}"/>
  263. </Trigger>
  264. </Style.Triggers>
  265. </Style>

 

 

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