Button 的 IsEnabled 工作不充分

问题描述 投票:0回答:1

我制作了“图标按钮”:上面的按钮和两个 TextBlock(在 DockPanel 内)。一个 TextBlock 是“图标”(w Awesome 字体),另一个用于按钮上的文本。 问题:当我在 VS 设计器中设置

IsEnabled=false
时,只有第二个 TextBlock 被禁用 - 图标仍然具有原始颜色(没有“禁用”外观)。为什么??

不幸的是,在笨拙的 C# 中,你只能覆盖作者允许的内容,所以我必须创建新的“IsEnabled”属性:

public new bool IsEnabled
{
    get => base.IsEnabled;
    set {
        base.IsEnabled = value;
        txtIcon.Opacity = (value ? 1.0 : 0.4);
    }
}

但是,如果我在 XAML 中设置

IsEnabled=false
,图标不会被禁用。并且只有当在代码中我设置了
btnOK.IsEnabled=false
时,整个按钮才会禁用外观。 我完全迷失在这种笨拙的行为中 - 即使当我强制按钮为图标设置“禁用外观”时,它在 VS 设计器中仍然行为不当(设计器是否设置了另一个“IsEnabled”??)。 有任何想法吗? (理想情况下,如果我不需要覆盖“IsEnabled”)

UPD 对于没有注意到问题的人:我们在按钮上有两个绝对相等的 TextBlock。我们设置

Button.IsEnabled=false
。但是一个 TextBlock(带有按钮文本)变成灰色,而另一个 TextBlock(带有一个符号)则保持不变!一定不能这样。

wpf button isenabled
1个回答
0
投票

如果您改变方法:

Xaml:

<Button Width="100" Height="50">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    
    <!-- Icon -->
    <Image Grid.Column="0" Source="..." Width="16" Height="16"/>
    
    <!-- Text -->
    <TextBlock Grid.Column="1" Text="text"/>
</Grid>

但即使它不起作用,你也可以随时更改文本的颜色!

解决方法

© www.soinside.com 2019 - 2024. All rights reserved.