xaml在RibbonMenuItem内设置边框画笔

时间:2019-01-23 15:14:25

标签: xaml

我正在尝试设置RibbonMenuItem目标类型的样式。里面的项目是带有边框和内容的复选标记。当IsMouseOver时,我希望边框笔刷为黑色。

问题是menuitem触发器属性上没有borderbrush,并且我还假设IsHighLighted有点类似于IsMouseOver属性,因此我制作了单独的边框样式,并将其绑定到触发器下的样式。我什至尝试将“不透明度”设置为1值,但似乎没有任何作用

正如您所知,这是我的代码,我试图覆盖Ribbonmenuitem样式

    <Style x:Key="BorderThicknessStyle"
           TargetType="{x:Type Border}">
        <Setter Property="BorderThickness" Value="1"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderThickness" Value="2"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="{x:Type RibbonMenuItem}"
           TargetType="{x:Type RibbonMenuItem}">
        <Setter Property="HorizontalContentAlignment" Value="{Binding 
    Path=HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType= 
   {x:Type ItemsControl}}}" />
        <Setter Property="VerticalContentAlignment" Value="{Binding 
    Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType= 
    {x:Type ItemsControl}}}" />
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="BorderBrush" Value="Transparent" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Padding" Value="3,2,3,2" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RibbonMenuItem}">
                    <Grid x:Name="MainGrid" SnapsToDevicePixels="True">
                        <Border x:Name="Border"
                                Background="{TemplateBinding Background}"
                                BorderThickness="{TemplateBinding 
                                BorderThickness}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                CornerRadius="2">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <!--Icon or check mark column-->
                                    <ColumnDefinition MinWidth="22"
                                                      Width="Auto"

                                   SharedSizeGroup="MenuItemIconColumnGroup" />
                                    <!--Header column-->
                                    <ColumnDefinition Width="*"/>
                                    <!--Submenu arrow column-->
                                    <ColumnDefinition Width="14" />
                                </Grid.ColumnDefinitions>

                                <Border x:Name="PART_SideBarBorder"
                                        BorderThickness="1"
                                        Background="{DynamicResource 
                                        ThemeWindowBackgroundBrush}"
                                        BorderBrush="{Binding RelativeSource= 
                                        {RelativeSource TemplatedParent}, 
                                        Path=Ribbon.BorderBrush}"
                                        MaxWidth="17"
                                        MaxHeight="17">
                                    <Grid x:Name="SideBarOverlay"
                                          Background="{TemplateBinding 
                                                      Background}">
                                        <Image x:Name="Image"
                                           Width="16"
                                           Height="16"
                                           Margin="4,3,6,1"
                                           VerticalAlignment="Center"
                                           HorizontalAlignment="Center"
                                           Source="{TemplateBinding 
                                                   ImageSource}" />
                                        <Border x:Name="CheckMarkBorder"
                                                BorderBrush="{TemplateBinding 
                                                             BorderBrush}"
                                                ClipToBounds="True">
                                            <Path x:Name="CheckMark" 
                                                  Visibility="Hidden"
                                                  Data="M 0 5 L 3 8 M 3 8 L 8 0"
                                                  Stretch="Uniform"
                                                  Stroke="{TemplateBinding 
                                                          Foreground}"
                                                  StrokeEndLineCap="Round"
                                                  StrokeStartLineCap="Round"
                                                  Margin="2"
                                                  StrokeThickness="2" />
                                        </Border>
                                    </Grid>
                                </Border>

                                <ContentPresenter Grid.Column="1"
                                        ContentSource="Header"
                                        VerticalAlignment="Center"
                                        Margin="{TemplateBinding Padding}"
                                        RecognizesAccessKey="True" />

                                <Path x:Name="Arrow"
                                  Visibility="Collapsed"
                                  Grid.Column="2"
                                  VerticalAlignment="Center"
                                  HorizontalAlignment="Center"
                                  Fill="{TemplateBinding Foreground}" />
                            </Grid>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ImageSource" Value="{x:Null}">
                            <Setter TargetName="Image" Property="Visibility" 
                                 Value="Collapsed" />
                        </Trigger>
                        <Trigger Property="IsCheckable" Value="True">
                             <Setter TargetName="Arrow" Property="Visibility" 
                                       Value="Hidden" />
                        </Trigger>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter TargetName="CheckMark" Property="Visibility" 
                                  Value="Visible" />
                            <Setter TargetName="CheckMarkBorder" 
                               Property="Visibility" Value="Visible" />
                            <Setter TargetName="Image" Property="Visibility" 
                                            Value="Hidden" />
                        </Trigger>
                        <Trigger Property="IsHighlighted" Value="True">
                            <Setter TargetName="PART_SideBarBorder" 
                                             Property="Style" Value=" 
                                        {StaticResource BorderThicknessStyle}"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="Image" Property="Opacity" 
                                     Value="0.5" />
                            <Setter TargetName="Arrow" Property="Opacity" 
                                     Value="0.5" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 个答案:

答案 0 :(得分:0)

This works for me. In the ControlTemplate.Triggers, you want to add the DataTrigger instead of Trigger. 

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsHighlighted}"
             Value="True">
        <Setter TargetName="PART_SideBarBorder" Property="BorderBrush"
                Value="Black"/>
</DataTrigger>