WPF一个简单的垂直菜单样式的实现

以前制作类似于垂直菜单功能的控件我都是Listbox和一个Popup实现的,今天尝试着用Menu做了一个简单垂直菜单,就当是做了个小练习写了这篇随笔~;

有什么不对的地方希望大家指正,分享和记录也是一个学习和提高的过程^-^。

先看看效果图(颜色搭配不是很合理有些难看):

实现方式就是重写了Menu和MenuItem的样式,绿色的地方是可以添加Icon的,只是简单的用Rectangle代替了(还是能说明问题的)

 1  <Style TargetType="{x:Type Menu}">
 2             <Setter Property="Template">
 3                 <Setter.Value>
 4                     <ControlTemplate TargetType="{x:Type Menu}">
 5                         <Border CornerRadius="0">
 6                             <ItemsPresenter/>
 7                         </Border>
 8                     </ControlTemplate>
 9                 </Setter.Value>
10             </Setter>
11         </Style>
12 
13         <Style TargetType="{x:Type MenuItem}">
14             <Setter Property="Template">
15                 <Setter.Value>
16                     <ControlTemplate TargetType="{x:Type MenuItem}">
17                         <Border Margin="0,2" x:Name="bd" Background="#CCCCCC" MinWidth="100" CornerRadius="0">
18                             <Grid>
19                                 <Grid.ColumnDefinitions>
20                                     <ColumnDefinition Width="30"/>
21                                     <ColumnDefinition/>
22                                 </Grid.ColumnDefinitions>
23                                 <Rectangle Fill="#99CC66" Height="20" Width="20"/>
24                                 <ContentPresenter Margin="0,10" ContentSource="Header" Grid.Column="1" HorizontalAlignment="Left"/>
25                                 <Popup x:Name="pop" Margin="10" IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Placement="Right">
26                                     <Border Margin="5" CornerRadius="5" Background="#FFCCCC">
27                                         <StackPanel IsItemsHost="True">
28                                         </StackPanel>
29                                     </Border>
30                                 </Popup>
31                             </Grid>
32                         </Border>
33                         <ControlTemplate.Triggers>
34                             <Trigger Property="IsMouseOver" Value="true">
35                                 <Setter TargetName="bd" Property="Background" Value="#0099CC"/>
36                                 <Setter TargetName="pop" Property="IsOpen" Value="true"/>
37                             </Trigger>
38                             <Trigger Property="IsMouseOver" Value="False">
39                                 <Setter TargetName="pop" Property="IsOpen" Value="false"/>
40                             </Trigger> 
41                             <Trigger Property="IsPressed" Value="True">
42                                 <Setter TargetName="bd" Property="Background" Value="#FF6666"/>
43                                 <Setter TargetName="pop" Property="IsOpen" Value="false"/>
44                             </Trigger>
45                         </ControlTemplate.Triggers>
46                     </ControlTemplate>
47                 </Setter.Value>
48             </Setter>
49         </Style>
 1  <StackPanel Width="100" HorizontalAlignment="Left">
 2         <Menu>
 3             <MenuItem Header="开始">
 4                 <MenuItem Header="开始"></MenuItem>
 5                 <MenuItem Header="开始"></MenuItem>
 6                 <MenuItem Header="开始"></MenuItem>
 7                 <MenuItem Header="开始"></MenuItem>
 8             </MenuItem>
 9         </Menu>
10         <Menu>
11             <MenuItem Header="哈哈">
12                 <MenuItem Header="哈哈"></MenuItem>
13                 <MenuItem Header="哈哈"></MenuItem>
14                 <MenuItem Header="哈哈"></MenuItem>
15                 <MenuItem Header="哈哈"></MenuItem>
16             </MenuItem>
17         </Menu>
18         <Menu>
19             <MenuItem Header="哦哦">
20                 <MenuItem Header="好看啦啦啦"></MenuItem>
21                 <MenuItem Header="啦啦啦"></MenuItem>
22                 <MenuItem Header="啦啦啦"></MenuItem>
23                 <MenuItem Header="啦啦啦"></MenuItem>
24             </MenuItem>
25         </Menu>
26     </StackPanel>

代码不多一点点,没有实现具体的什么功能,要是真要这么用还得做一部分工作的,这只是个显示效果而已。

原文地址:https://www.cnblogs.com/wall-e/p/3531214.html