c# - 如何将基于触发器属性的样式应用于内容控件?
问题描述
在我正在处理的当前 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>
如图所示,样式也被文本块拾取,但我不知道如何将此样式添加到具有图标的内容控件中
编辑:- 应用程序中指定的图标示例
<DataTemplate x:Key="FolderIcon">
<Path
Fill="#047F89"
Data="....."/>
</DataTemplate>
解决方案
您必须将 的Fill
属性绑定Path
到父Control
元素的Control.Foreground
(或Button.Foreground
)而不是直接设置它。现在图标颜色将适应Foreground
触发器分配的值。我还删除了多余Grid
的 theButton.Content
和 the Content
Setter
,因为它会在每次按下时Trigger
删除图标元素并将默认值添加到 Style (从Style-Setter 移动):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
on移至.Path.Fill
Path
ResourceDictionary
推荐阅读
- android - DART/FLUTTER - 在 ListBuilder 中选中复选框
- sql - 创建 SQL 函数时如何显示来自外键的信息?
- r - 编织到PDF时如何将R markdown块中的文本转换为斜体
- powershell - 在powershell中设置和显示环境变量
- django - “必须是表 A 的所有者”,但 A 不存在
- java - 如何修复 HorizontalScrollView 的滚动宽度?
- highcharts - 我们如何在甘特图高图中的水平栏中显示特定时间线的阻塞区域
- python - 有没有一种简单的方法可以计算python中整个数据集在3D空间中两点的距离?
- linux - fork 似乎在不必要时复制
- javascript - 如何将列表分成 3 个项目的行?- Vue.js