如何将基于触发器属性的样式应用于内容控件?

时间:2019-09-08 13:50:01

标签: c# wpf xaml

在我当前正在使用的WPF应用程序中,当鼠标被按下时(属性isPressed = true),我必须反转图标的颜色。我需要这样做的原因是我想保持应用程序在图标颜色和背景方面的一致性。但是此图标已嵌入按钮中,单击该按钮时会显示类似的颜色,因此该图标不可见

随着样式触发器使用我设置的红色,但是几何图形的颜色未更改。 (isPressed = true)时,是否可以使用此样式触发器将几何图形的颜色也设置为红色?

这是我的代码

我的风格如下

    <Style x:Key="ButtonBackground" TargetType="{x:Type Button}">

        <Style.Triggers>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Foreground" Value="Red" />
                <Setter Property="Content" Value="yellow" />
            </Trigger>
        </Style.Triggers>
    </Style>

我尝试将setter属性设置为内容为黄色,只是为了查看它是否有效但不起作用

正在使用的部分如下

<Border BorderBrush="{StaticResource ContentBackground}" BorderThickness="0,0,0,1">
            <Button
                x:Name="NameButton" 

                Style="{StaticResource ButtonBackground}"
                >


                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>

                    <StackPanel Grid.Column="0" Orientation="Horizontal">
                        <ContentControl x:Name="Icon"
                                        Width="25"
                                        Height="25"
                                        ">

                        </ContentControl>
                        <TextBlock Text="{Binding Name}"
                                "/>
                    </StackPanel>

                </Grid>

            </Button>
        </Border>

如图像中所示,样式也是由文本块拾取的,但是我不知道如何将这种样式添加到带有图标的contentcontrol中

编辑:-在应用程序中指定的图标示例

    <DataTemplate x:Key="FolderIcon">
        <Path 
              Fill="#047F89"
              Data="....."/>
    </DataTemplate>

1 个答案:

答案 0 :(得分:0)

您必须将Fill的{​​{1}}属性绑定到父Path元素的Control(或Control.Foreground)上,而不是直接进行设置。现在,图标颜色将适应触发器分配的Button.Foreground值。我还删除了Foreground的冗余GridButton.Content的{​​{1}} Content,因为它每次都会删除图标Setter元素按下Trigger并将默认的Path值添加到样式(从Button移动到样式设置器):

Forground

如果您决定将Path.Fill移至<Style x:Key="ButtonBackground" TargetType="{x:Type Button}"> <Setter Property="Foreground" Value="#047F89" /> <Style.Triggers> <Trigger Property="IsPressed" Value="True"> <Setter Property="Foreground" Value="Red" /> </Trigger> </Style.Triggers> </Style> <Button x:Name="NameButton" Style="{StaticResource ButtonBackground}"> <Button.Content> <StackPanel Orientation="Horizontal"> <Path Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Control}, Path=Foreground}" Height="16" Width="16" Stretch="Uniform" VerticalAlignment="Center" Margin="5,0,0,0" Data="....."/> <TextBlock Text="{Binding Name}" TextTrimming="WordEllipsis" VerticalAlignment="Center" Margin="5,0,0,0"/> <StackPanel> <Button.Content> </Button> ,则Binding上的Path.Fill仍然可以使用。