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

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

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

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

  <Style TargetType="{x:Type Menu}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Menu}">
<Border CornerRadius="0">
<ItemsPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style> <Style TargetType="{x:Type MenuItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border Margin="0,2" x:Name="bd" Background="#CCCCCC" MinWidth="100" CornerRadius="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle Fill="#99CC66" Height="20" Width="20"/>
<ContentPresenter Margin="0,10" ContentSource="Header" Grid.Column="1" HorizontalAlignment="Left"/>
<Popup x:Name="pop" Margin="10" IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Placement="Right">
<Border Margin="5" CornerRadius="5" Background="#FFCCCC">
<StackPanel IsItemsHost="True">
</StackPanel>
</Border>
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="bd" Property="Background" Value="#0099CC"/>
<Setter TargetName="pop" Property="IsOpen" Value="true"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter TargetName="pop" Property="IsOpen" Value="false"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="#FF6666"/>
<Setter TargetName="pop" Property="IsOpen" Value="false"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
  <StackPanel Width="100" HorizontalAlignment="Left">
<Menu>
<MenuItem Header="开始">
<MenuItem Header="开始"></MenuItem>
<MenuItem Header="开始"></MenuItem>
<MenuItem Header="开始"></MenuItem>
<MenuItem Header="开始"></MenuItem>
</MenuItem>
</Menu>
<Menu>
<MenuItem Header="哈哈">
<MenuItem Header="哈哈"></MenuItem>
<MenuItem Header="哈哈"></MenuItem>
<MenuItem Header="哈哈"></MenuItem>
<MenuItem Header="哈哈"></MenuItem>
</MenuItem>
</Menu>
<Menu>
<MenuItem Header="哦哦">
<MenuItem Header="好看啦啦啦"></MenuItem>
<MenuItem Header="啦啦啦"></MenuItem>
<MenuItem Header="啦啦啦"></MenuItem>
<MenuItem Header="啦啦啦"></MenuItem>
</MenuItem>
</Menu>
</StackPanel>

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

WPF一个简单的垂直菜单样式的实现的更多相关文章

  1. WPF 一个简单的颜色选择器

    原文:WPF 一个简单的颜色选择器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/8340999 ...

  2. Expression Blend4经验分享:制作一个简单的图片按钮样式

    这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...

  3. Expression Blend4经验分享:制作一个简单的文字按钮样式

    首先在Grid里放一个TextBlock,对象时间线窗口的结构树如下 右键点击grid,选择构成控件 会弹出构成控件的对话框,选择你要构成的控件类型,控件名称,控件样式存储位置 这里我们选择butto ...

  4. js写的一个简单的手风琴菜单

    1 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&q ...

  5. 14、Semantic-UI之菜单样式

    14.1 基础菜单样式   在Semantic-UI中使用class="ui menu". 示例:定义基础菜单样式 <div class="ui menu" ...

  6. 简单的dialog菜单

    本文介绍的是我自己做的一个简单的dialog菜单,可以直接植入到类中. 方法代码: /** 显示一个靠右上的dialog列表菜单*/private void showTopBarRightButton ...

  7. Prism for WPF 搭建一个简单的模块化开发框架(三) 给TreeView加样式做成菜单

    原文:Prism for WPF 搭建一个简单的模块化开发框架(三) 给TreeView加样式做成菜单 昨天晚上把TreeView的样式做了一下,今天给TreeView绑了数据,实现了切换页面功能 上 ...

  8. Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单、导航

    原文:Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单.导航 这个实际上是在聊天之前做的,一起写了,也不分先后了 看一下效果图,上面是模块主导航,左侧是模块内菜单,现在加一下隐藏 ...

  9. Prism for WPF 搭建一个简单的模块化开发框架(一)

    原文:Prism for WPF 搭建一个简单的模块化开发框架(一) 最近闲来无事又想搞搞WPF..... 做个框架吧,可能又是半途而废....总是坚持不下来 不废话了, 先看一下工程结构 布局大概是 ...

随机推荐

  1. arcgis 绝对、相对、UNC 和 URL

    您每天都通过路径浏览至数据和工具箱.在共享数据和工具之前,您对此可能没有做太多考虑,其实您也无需考虑.本部分将详细讨论以下方面内容:路径.定义不同类型的路径以及 ArcGIS 对路径的管理方式. 路径 ...

  2. ListView滑动不爽,滚动一页得滑几次?该用分页列表啦!

    ListView等滚动位置经常不符合用户期望: 很多时候都是看完一页想滑到下一页,但滑动一次距离往往不是不够就是超过,很难控制. PagedListView工程中提供了PageScroller来解决这 ...

  3. Android_SystemService

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  4. httperf ---linux web站点压力测试

    一.工具下载&&安装 软件获取 ftp://ftp.hpl.hp.com/pub/httperf/ 这里使用的是如下的版本 ftp://ftp.hpl.hp.com/pub/httpe ...

  5. Scala语言专题

    Scala基础01:基础语法 Scala基础02:函数,懒值,异常 Scala基础03:数组 Scala基础04:类与对象 Scala基础05:包与引用 Scala基础06:继承 Scala基础07: ...

  6. PHP自动执行程序

    /****config.php***/ <?php return 1; //需要停止时改成0 ?> /******************/ ignore_user_abort();//关 ...

  7. Python(2.7.6) 函数对象与闭包

    在 Python 中,一切皆对象.函数也是对象,它可以赋值给其他变量,也可以当作参数传递. lambda 表达式可以创建函数对象,在 Python 中,lambda 表达式的函数体只能有唯一的一条语句 ...

  8. ASP过滤HTML标签

    <% Function RemoveHTML(strHTML) Dim objRegExp, Match, Matches Set objRegExp = New Regexp objRegEx ...

  9. SQL Server2008数据库如何改名

    未使用的数据库改名比较方便,找到你要更改的数据库,右键选择[重命名]. 2 然后将你想要更改的名字写好,然后点击一下旁边的空白栏. 3 然后你就发现数据库的名称已经改好了. END 使用中的数据库   ...

  10. 在页面生命周期执行时 Page 对象在 SaveState 阶段都发生了什么事?

    先看下 SaveViewState 的源码: // Answer any state this control or its descendants want to save on freeze. / ...