Menu自定义样式

自定义Menu样式

通过图片替换固有控件布局,简单实现样式效果

先看效果

在这里插入图片描述

Xaml

    <UserControl.Resources>
        <ImageBrush x:Key="Images1" ImageSource="pack://application:,,,/Wpf.AvalonDock;component/Images/MenuItem_BG.png" Opacity="0.8"/>
        <ImageBrush x:Key="Images2" ImageSource="pack://application:,,,/Wpf.AvalonDock;component/Images/MenuItem_BG2.png" Opacity="0.8"/>
        <ImageBrush x:Key="Selected_BG" ImageSource="pack://application:,,,/Wpf.AvalonDock;component/Images/Selected_BG.png"/>
        <Style TargetType="{x:Type Menu}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Menu}">
                        <Border BorderBrush="White" Background="White" CornerRadius="3">
                            <ItemsPresenter Margin="-2 0 0 0"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="{x:Type MenuItem}" x:Key="Main_MenuItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type MenuItem}">
                        <Border x:Name="Border" Background="Transparent">
                            <Grid>
                                <ContentPresenter Margin="{TemplateBinding Padding}" x:Name="HeaderHost" RecognizesAccessKey="True" ContentSource="Header"/>
                                <Popup IsOpen="{Binding Path=IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Right" x:Name="SubMenuPopup" Focusable="True" AllowsTransparency="True">
                                    <Border x:Name="SubMenuBorder">
                                        <Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True">
                                            <Border x:Name="My_Border" Background="{DynamicResource Images1}"/>
                                            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" Margin="2"/>
                                        </Grid>
                                    </Border>
                                </Popup>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="Tag" Value="True">
                                <Setter TargetName="My_Border" Property="Background" Value="{DynamicResource Images2}"/>
                            </Trigger>
                            <Trigger Property="Tag" Value="True">
                                <Setter TargetName="My_Border" Property="Background" Value="{DynamicResource Images1}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type MenuItem}">
                        <Border x:Name="Border" BorderBrush="Transparent" BorderThickness="1">
                            <Grid x:Name="My_Grid">
                                <ContentPresenter Margin="{TemplateBinding Padding}" x:Name="HeaderHost" RecognizesAccessKey="True" ContentSource="Header"/>
                                <Popup IsOpen="{Binding Path=IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" 
									   Placement="Right" x:Name="SubMenuPopup" Focusable="False " 
									   AllowsTransparency="True">
                                    <Border x:Name="SubMenuBorder">
                                        <Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True">
                                            <Border x:Name="My_Border" Margin="-10 0 0 0"/>
                                            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" Margin="2"/>
                                        </Grid>
                                    </Border>
                                </Popup>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsHighlighted" Value="true">
                                <Setter TargetName="Border" Property="BorderBrush" Value="Yellow"/>
                                <Setter TargetName="Border" Property="BorderThickness" Value="1"/>
                            </Trigger>
                            <Trigger Property="IsHighlighted" Value="false">
                                <Setter TargetName="Border" Property="BorderThickness" Value="0"/>
                            </Trigger>
                            <Trigger Property="IsChecked" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="{DynamicResource Images1}"/>
                            </Trigger>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter TargetName="Border" Property="Background" Value="{DynamicResource Images2}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>

应用样式

    <Menu Name="menu1" Height="24" Width="40" Margin="20 0 0 0">
        <MenuItem x:Name="My_Menu" Height="80" Width="50" Style="{StaticResource Main_MenuItem}">
            <MenuItem.Header>
                <Label Content="视图"/>
            </MenuItem.Header>
            <MenuItem Header="工程" Tag="true" IsChecked="True" Height="24" Padding="20,0,0,0" Click="MenuItem_Checked"/>
            <MenuItem Header="编译输出" Tag="true" IsChecked="True" Height="24" Padding="20,0,0,0" Click="MenuItem_Checked"/>
            <MenuItem Header="FB/FU" Tag="true" IsChecked="True" Height="24" Padding="20,0,0,0" Click="MenuItem_Checked"/>
            <MenuItem Header="通道" Tag="true" IsChecked="True" Height="24" Padding="20,0,0,0" Click="MenuItem_Checked"/>
            <MenuItem Header="EtherCAT" Tag="true" IsChecked="True" Height="24" Padding="20,0,0,0" Click="MenuItem_Checked"/>
        </MenuItem>
    </Menu>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下几种方式自定义 Vue Menu 菜单的样式: 1. 使用内联样式:在 Vue 组件中,可以直接使用内联样式自定义菜单的样式。例如: ```html <template> <div> <ul> <li :style="{ backgroundColor: 'red', color: 'white' }">菜单项1</li> <li :style="{ backgroundColor: 'blue', color: 'white' }">菜单项2</li> <li :style="{ backgroundColor: 'green', color: 'white' }">菜单项3</li> </ul> </div> </template> ``` 2. 使用 CSS 类名:为 Vue 组件中的菜单项添加 CSS 类名,然后在 CSS 文件中定义该类名的样式。例如: ```html <template> <div> <ul> <li class="custom-menu-item">菜单项1</li> <li class="custom-menu-item">菜单项2</li> <li class="custom-menu-item">菜单项3</li> </ul> </div> </template> <style> .custom-menu-item { background-color: red; color: white; } </style> ``` 3. 使用 CSS 模块化:如果您正在使用 Vue 的单文件组件,可以使用 CSS 模块化来为菜单项定义样式。首先,在组件的 `<style>` 标签中声明一个模块化的样式文件,然后将其应用到菜单项上。例如: ```html <template> <div> <ul> <li :class="$style.customMenuItem">菜单项1</li> <li :class="$style.customMenuItem">菜单项2</li> <li :class="$style.customMenuItem">菜单项3</li> </ul> </div> </template> <style module> .customMenuItem { background-color: red; color: white; } </style> ``` 这些方法可以帮助您自定义 Vue Menu 菜单的样式。根据您的需求选择适合的方式进行样式定制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值