首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当内容为StackPanel时,按钮前景不变

当内容为StackPanel时,按钮前景不变
EN

Stack Overflow用户
提问于 2018-06-02 04:19:18
回答 1查看 504关注 0票数 1

我定义了一个按钮样式,其中模板有一个名称为" ContentPresenter“的contentPresenter。然后它有一个触发器,如下所示:

代码语言:javascript
复制
<ControlTemplate.Triggers>
    <Trigger Property="UIElement.IsEnabled" Value="False">
        <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383" />
    </Trigger>
</ControlTemplate.Triggers>

当按钮被禁用时,此触发器只是将按钮的前景颜色更改为灰色。但是,我的应用程序中有一个按钮,它的内容不是简单的文本。该按钮如下所示:

代码语言:javascript
复制
<Button Grid.Column="3" Grid.Row="3" Grid.ColumnSpan="2"
            Margin="120 20 30 10"
            Command="{Binding SomeCommand}">
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding MyImage}" Margin="0 0 2 0"
                   Visibility="{Binding ShowMyImage, Converter={StaticResource BooleanToVisibilityConverter}}"/>
            <TextBlock Text="{Binding ButtonText}" />
        </StackPanel>
    </Button>

无论是否禁用此按钮,此按钮的前景都是相同的。我认为这是因为按钮的文本在内容呈现器的stackpanel中的文本块中,但我不知道如何将前景颜色更改应用于内部文本块。

我尝试将触发器中的属性改为使用"TextBlock.Foreground“而不是"TextElement.Foreground”。我还尝试将内部文本块的前景绑定到FrameworkElement类型的最接近祖先的前景颜色,如下所示:

代码语言:javascript
复制
<TextBlock Text="{Binding ButtonText}" Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(FrameworkElement.Foreground)}" />

这些都不管用。我需要做什么才能使前景色应用于StackPanel中的TextBlock?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 05:09:45

触发器应该在样式中,并且应该在按钮本身上设置前景,而不是在ContentPresenter上。然后它就可以工作了,使用自定义模板或使用默认模板。不需要任何额外的绑定。

代码语言:javascript
复制
<Style TargetType="Button" x:Key="MyButtonStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Background="Beige" BorderBrush="Black" BorderThickness="1" Padding="6,2">
                    <ContentPresenter 
                        />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="#FF838383" />
        </Trigger>
    </Style.Triggers>
</Style>

用法:

代码语言:javascript
复制
<Button
    IsEnabled="False"
    Style="{StaticResource MyButtonStyle}"
    >
    <StackPanel>
        <TextBlock 
        >Blah Blah</TextBlock>
        <Button>X</Button>
    </StackPanel>
</Button>
<Button Style="{StaticResource MyButtonStyle}" IsEnabled="False">Testing</Button>

截图(别管我丑陋的模板):

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50650511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档