Wpf 无法从样式中将文本块颜色绑定到按钮
我试图定义一种Wpf 无法从样式中将文本块颜色绑定到按钮,wpf,xaml,Wpf,Xaml,我试图定义一种样式,当按钮将文本块作为其内容时,可以使用该样式,当按钮已启用=False时,我想设置文本块的前景颜色 <Button Style="{StaticResource TransparentButtonStyle}" IsEnabled="{Binding IsAllowed}"> <TextBlock Text="Click Me" Style="{StaticResource HyperLinkS
样式
,当按钮
将文本块
作为其内容
时,可以使用该样式,当按钮
已启用=False时,我想设置文本块
的前景
颜色
<Button Style="{StaticResource TransparentButtonStyle}"
IsEnabled="{Binding IsAllowed}">
<TextBlock Text="Click Me"
Style="{StaticResource HyperLinkStyle}">
</TextBlock>
</Button>
<Style x:Key="TransparentButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="Transparent">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="HyperLinkStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="Blue" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Foreground" Value="LightBlue" />
<Setter Property="TextDecorations" Value="Underline" />
</Trigger>
</Style.Triggers>
</Style>
我可以修改
TextBlock
的样式
来抓取父按钮
的已启用
值,以便能够以某种方式设置前景
颜色吗?如果你想进入按钮
你可以使用数据触发器
和相对资源
绑定
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<!-- Setters -->
</Trigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False">
<!-- Setters -->
</DataTrigger>
</Style.Triggers>
正常的触发器
应该可以工作,因为IsEnabled
值受
获取一个值,该值将成为派生类中IsEnabled的返回值
...
此属性的默认实现缓存该值,并计算是否启用此元素的父元素。(如果未启用父元素,则无法在实际用户界面(UI)中有效启用子元素。)
因此,基本上,如果禁用了父
按钮
,则子文本块
也将被禁用如果您想进入按钮
,可以使用数据触发器
和关系资源
绑定
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<!-- Setters -->
</Trigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False">
<!-- Setters -->
</DataTrigger>
</Style.Triggers>
正常的触发器
应该可以工作,因为IsEnabled
值受
获取一个值,该值将成为派生类中IsEnabled的返回值
...
此属性的默认实现缓存该值,并计算是否启用此元素的父元素。(如果未启用父元素,则无法在实际用户界面(UI)中有效启用子元素。)
因此,基本上,如果禁用了父按钮
,则子文本块
也将被禁用您只需将
添加到HyperLinkStyle中,但我建议您改为创建LinkButtonStyle,这样您的最终标记填充将更加清晰:
<Button Content="Link text" Style="{StaticResource LinkButtonStyle}" />
这只会让你的观点更清晰
以下是我的链接按钮模板:
<Style x:Key="LinkButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="{StaticResource LinkButtonText}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock x:Name="ContentPresenter" Background="{TemplateBinding Background}"
Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource LinkButtonDisabled}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsEnabled" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="ContentPresenter" Property="TextDecorations" Value="Underline"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您只需将
添加到您的超链接样式中,但我建议您改为创建LinkButtonStyle,这样您的最终标记填充将更加清晰:
<Button Content="Link text" Style="{StaticResource LinkButtonStyle}" />
这只会让你的观点更清晰
以下是我的链接按钮模板:
<Style x:Key="LinkButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="{StaticResource LinkButtonText}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock x:Name="ContentPresenter" Background="{TemplateBinding Background}"
Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="ContentPresenter" Property="Foreground" Value="{DynamicResource LinkButtonDisabled}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsEnabled" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="ContentPresenter" Property="TextDecorations" Value="Underline"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>