按钮在启用时应用Foreground
。如果设置为已禁用,则需要应用默认按钮的已禁用Foreground
。
<Button Width="150"
Height="50"
Content="Test"
Foreground="Red"
IsEnabled="False" />
我有这个按钮的触发器,如
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#FFADADAD"/>
</Trigger>
启用时,Foreground
不会应用。
对此有什么想法吗?
需要如下,
答案 0 :(得分:11)
如果您在本地设置属性,则触发器将无法更改precedence引起的值。
将Foreground和IsEnabled属性移动到样式中:
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#FFADADAD"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<Button Width="150"
Height="50"
Content="Test">
</Button>
答案 1 :(得分:1)
我不确定我是否正确理解了这个问题,因为有问题的代码应该可以正常使用。以下是生成按钮的工作示例,与捕获的图像完全一致。在这种情况下,我将Style作为资源放在Button的容器控件-StackPanel中:
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="Red"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#FFADADAD"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<Button Width="150"
Height="50"
Content="Test"
IsEnabled="True">
</Button>
</StackPanel>
答案 2 :(得分:0)
如果您编辑Button的默认模板,您可以在控件模板中找到以下触发器。
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
</Trigger>
此触发器使用TargetName将Foreground设置为内容演示者。这里没有使用模板绑定。它直接赋予价值。因此,不会应用您在样式触发器中为前景设置的值。您可以编辑控件模板以满足您的要求。这种限制不仅适用于前景,背景和BorderBrush也有这个限制。
答案 3 :(得分:0)
以下代码对我有用:
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid x:Name="grid" Background="{StaticResource FlatButtonNavigation}">
<Border Name="ButtonBorder" CornerRadius="5,5,5,5"
BorderBrush="Gray" BorderThickness="2">
<ContentPresenter Name="MyContentPresenter"
HorizontalAlignment="center"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
TextBlock.FontSize="{TemplateBinding FontSize}"
TextBlock.Foreground="{StaticResource LeftPanelFontColor}"
Margin="10"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="ButtonBorder" Property="Background" Value="LightGray"/>
<Setter TargetName="ButtonBorder" Property="BorderBrush" Value="#FFADB2B5"/>
<Setter TargetName="MyContentPresenter" Property="TextBlock.Foreground" Value="White"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>