WPF 自定义右键菜单样式

在项目过程中,有时系统提供的控件不好看,这时可能需要重写控件,也可以重新定义下控件的样式外观来达到要求,WPF就支持控件的自定义Style样式。

下面我就提供一个右键菜单的自定义style样式。

首先我做一个button,这个button有右键菜单,它的xaml代码如下:

<Button Margin="84,98,71,121" Name="button1" Content="ContextMenu Style">
            <Button.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="1" >
                        <MenuItem.Icon>
                            <Image Width="20" Height="20"  Source="./color.png" />
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="2" >
                    </MenuItem>
                    <MenuItem Header="3" />
                    <Separator />
                    <MenuItem Header="4" >
                    </MenuItem>
                    <MenuItem Header="5" />
                </ContextMenu>
            </Button.ContextMenu>
 </Button> 

系统的contextMenu的外观为下图的样式: 

下面这个图为我加上一些style的效果图: 

由于下面的style显示不全,现放上工程文件,文件位于attachments中,是个RAR文件。点击contextMenu.rar下载看看。

现把style的代码放上:

<!--自定义ContextMenu的外观样式-->
<Style TargetType="{x:Type ContextMenu}">
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Grid.IsSharedSizeScope" Value="True"/>
    <Setter Property ="Focusable" Value="False"/>
    <Setter Property="HasDropShadow" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ContextMenu}">
                <Border 
                      Name="Border"
                      Background="#6EA0B0"
                      BorderBrush="#888888"
                      BorderThickness="1" >
                    <StackPanel IsItemsHost="True"
                        KeyboardNavigation.DirectionalNavigation="Cycle"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasDropShadow" Value="true">
                        <Setter TargetName="Border" Property="Padding" Value="0,3,0,3"/>
                        <Setter TargetName="Border" Property="CornerRadius" Value="4"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!--自定义菜单项之间的分隔符的样式-->
<Style x:Key=&#
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值