none
MenuItem默认样式问题 RRS feed

  • 问题

  • 用blend编辑MenuItem的默认style

    <Trigger Property="IsSuspendingPopupAnimation" Value="True">
    	<Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/>
    </Trigger>

    这里就报错了  这是为什么

    把这备注掉  并引用style  发现右键菜单的效果变了  样子差很多  

    我主要是想要改下 鼠标移动上去的颜色

    <Trigger Property="IsHighlighted" Value="True">
    	<Setter Property="Background" Value="{DynamicResource ButtonOverBrush}"/>
    	<Setter Property="Foreground" Value="{DynamicResource BackgroundBrush}"/>
    </Trigger>
    <Grid.Resources>
    	<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#144571"/>
    	<SolidColorBrush x:Key="ButtonOverBrush" Color="#144571"/>
    </Grid.Resources>

    这样的话 不引用style那ButtonOverBrush没有效果 但是listbox不引用style但是修改HighlightBrushKey就有效果

    请问这里MenuItem怎么不影响原来的效果 只是修改给高亮的背景

    2012年6月25日 8:21

答案

  • 我寫了一個比較完整的Demo, 你可以參考一下。

     <Grid>
            <Button Name="button" Content="btn" Width="50" Height="30">
                <Button.ContextMenu>
                    <ContextMenu>
                        <ContextMenu.Resources>
                            <SolidColorBrush x:Key="MenuItemSelectionFill" Color="Green"/>
                            <Geometry x:Key="Checkmark">M 0,5.1 L 1.7,5.2 L 3.4,7.1 L 8,0.4 L 9.2,0 L 3.3,10.8 Z</Geometry>
                            <ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
                                <Grid SnapsToDevicePixels="true">
                                    <Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
                                    <Rectangle x:Name="InnerBorder" Margin="1" RadiusY="2" RadiusX="2"/>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/>
                                            <ColumnDefinition Width="4"/>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="37"/>
                                            <ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/>
                                            <ColumnDefinition Width="17"/>
                                        </Grid.ColumnDefinitions>
                                        <ContentPresenter x:Name="Icon" ContentSource="Icon" Margin="1" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
                                        <Border x:Name="GlyphPanel" BorderBrush="#CDD3E6" BorderThickness="1" Background="#E6EFF4" CornerRadius="3" Height="22" Margin="1" Visibility="Hidden" Width="22">
                                            <Path x:Name="Glyph" Data="{StaticResource Checkmark}" Fill="#0C12A1" FlowDirection="LeftToRight" Height="11" Width="9"/>
                                        </Border>
                                        <ContentPresenter Grid.Column="2" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                        <TextBlock Grid.Column="4" Margin="{TemplateBinding Padding}" Text="{TemplateBinding InputGestureText}"/>
                                    </Grid>
                                </Grid>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="Icon" Value="{x:Null}">
                                        <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
                                    </Trigger>
                                    <Trigger Property="IsChecked" Value="true">
                                        <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
                                        <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
                                    </Trigger>
                                    <Trigger Property="IsHighlighted" Value="true">
                                        <Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemSelectionFill}"/>
                                        <Setter Property="Stroke" TargetName="Bg" Value="#8071CBF1"/>
                                        <Setter Property="Stroke" TargetName="InnerBorder" Value="#40FFFFFF"/>
                                    </Trigger>
                                    <Trigger Property="IsEnabled" Value="false">
                                        <Setter Property="Foreground" Value="#FF9A9A9A"/>
                                        <Setter Property="Background" TargetName="GlyphPanel" Value="#EEE9E9"/>
                                        <Setter Property="BorderBrush" TargetName="GlyphPanel" Value="#DBD6D6"/>
                                        <Setter Property="Fill" TargetName="Glyph" Value="#848589"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </ContextMenu.Resources>
                        <MenuItem Header="menu1">
                            <MenuItem Header="test"/>
                        </MenuItem>
                        <MenuItem Header="menu2" />
                    </ContextMenu>
                </Button.ContextMenu>
            </Button>
        </Grid>

    注意這個ControlTemplate的Key 給到的是SubmenuItem,意思就是説你會發現黨鼠標移動到子MenuItem上方時,它的背景色會變成Green. 如果你要apply到父級的MenuItem,可以用相同的方法實現。

    希望可以幫到你。


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 小携 2012年6月28日 1:14
    2012年6月27日 9:26
    版主

全部回复

  • 我主要是想要改下 鼠标移动上去的颜色

    请看一下我之前做过的一个帖子,里面就讲了怎么实现这个要求。

    链接:http://social.msdn.microsoft.com/Forums/en-AU/wpf/thread/503f9293-546a-4488-95ea-e1e740274d4a


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月26日 6:20
    版主
  • Kee 谢谢你的回答...

    <ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">

    但是我不会调用这ControlTemplate...

    没遇到过这么复杂的key 我是这么写的

    <MenuItem Header="123" Template="{DynamicResource SubmenuItemTemplateKey}"/>

    一直查找不到资源...

    请问要怎么调用...

    2012年6月26日 8:55
  • 我寫了一個比較完整的Demo, 你可以參考一下。

     <Grid>
            <Button Name="button" Content="btn" Width="50" Height="30">
                <Button.ContextMenu>
                    <ContextMenu>
                        <ContextMenu.Resources>
                            <SolidColorBrush x:Key="MenuItemSelectionFill" Color="Green"/>
                            <Geometry x:Key="Checkmark">M 0,5.1 L 1.7,5.2 L 3.4,7.1 L 8,0.4 L 9.2,0 L 3.3,10.8 Z</Geometry>
                            <ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
                                <Grid SnapsToDevicePixels="true">
                                    <Rectangle x:Name="Bg" Fill="{TemplateBinding Background}" RadiusY="2" RadiusX="2" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/>
                                    <Rectangle x:Name="InnerBorder" Margin="1" RadiusY="2" RadiusX="2"/>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition MinWidth="24" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/>
                                            <ColumnDefinition Width="4"/>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="37"/>
                                            <ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/>
                                            <ColumnDefinition Width="17"/>
                                        </Grid.ColumnDefinitions>
                                        <ContentPresenter x:Name="Icon" ContentSource="Icon" Margin="1" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
                                        <Border x:Name="GlyphPanel" BorderBrush="#CDD3E6" BorderThickness="1" Background="#E6EFF4" CornerRadius="3" Height="22" Margin="1" Visibility="Hidden" Width="22">
                                            <Path x:Name="Glyph" Data="{StaticResource Checkmark}" Fill="#0C12A1" FlowDirection="LeftToRight" Height="11" Width="9"/>
                                        </Border>
                                        <ContentPresenter Grid.Column="2" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                        <TextBlock Grid.Column="4" Margin="{TemplateBinding Padding}" Text="{TemplateBinding InputGestureText}"/>
                                    </Grid>
                                </Grid>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="Icon" Value="{x:Null}">
                                        <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
                                    </Trigger>
                                    <Trigger Property="IsChecked" Value="true">
                                        <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
                                        <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
                                    </Trigger>
                                    <Trigger Property="IsHighlighted" Value="true">
                                        <Setter Property="Fill" TargetName="Bg" Value="{StaticResource MenuItemSelectionFill}"/>
                                        <Setter Property="Stroke" TargetName="Bg" Value="#8071CBF1"/>
                                        <Setter Property="Stroke" TargetName="InnerBorder" Value="#40FFFFFF"/>
                                    </Trigger>
                                    <Trigger Property="IsEnabled" Value="false">
                                        <Setter Property="Foreground" Value="#FF9A9A9A"/>
                                        <Setter Property="Background" TargetName="GlyphPanel" Value="#EEE9E9"/>
                                        <Setter Property="BorderBrush" TargetName="GlyphPanel" Value="#DBD6D6"/>
                                        <Setter Property="Fill" TargetName="Glyph" Value="#848589"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </ContextMenu.Resources>
                        <MenuItem Header="menu1">
                            <MenuItem Header="test"/>
                        </MenuItem>
                        <MenuItem Header="menu2" />
                    </ContextMenu>
                </Button.ContextMenu>
            </Button>
        </Grid>

    注意這個ControlTemplate的Key 給到的是SubmenuItem,意思就是説你會發現黨鼠標移動到子MenuItem上方時,它的背景色會變成Green. 如果你要apply到父級的MenuItem,可以用相同的方法實現。

    希望可以幫到你。


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 小携 2012年6月28日 1:14
    2012年6月27日 9:26
    版主
  • 谢谢...我在研究研究...

    2012年6月28日 1:14