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>

代碼不多一點點,沒有實現具體的什么功能,要是真要這么用還得做一部分工作的,這只是個顯示效果而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM