【问题标题】:WPF, Telerik: Change control style when disabledWPF,Telerik:禁用时更改控件样式
【发布时间】:2017-10-17 17:00:44
【问题描述】:

Telerik 控制有问题。

<Style x:Key="RadDropDownButtonStyle" TargetType="telerik:RadDropDownButton">
<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="telerik:RadDropDownButton">
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Foreground"  Value="Red" />...

所以,这会处理 Disabled 属性。文字会改变颜色,但不是对比度,类似于水印。

如何禁用此功能?并且让disabled控件对比更强烈?

【问题讨论】:

    标签: c# wpf xaml telerik raddropdownbutton


    【解决方案1】:

    文字改变了它的颜色,但它不是对比度,类似于水印。

    对于将来的参考,这是由Opacity 属性引起的。当不透明度低于 1 时,它会变亮。

    您所描述的问题非常熟悉。恐怕没有什么好方法可以摆脱这种情况,以至于我能给你的最好建议就是不要打扰。如果有的话,它只会让使用主题和样式变得非常痛苦。

    但是,有一种简单的方法可以通过将 IsEnabled="False" 属性替换为 IsHitTestVisible="False"Focusable="False" 来获得所需的行为
    这些将使得无法通过键盘导航单击或聚焦控件,基本上使其禁用。现在您可以添加更多样式属性,使其看起来像您认为禁用的控件应该看起来的样子。例如,通过设置想要的 ForegroundBackground 或者您甚至可以使用接近 1(例如:0.9)的 Opacity 来减少它比原版暗,但仍然足够暗,可以正常阅读。

    我希望这可以帮助您解决当前的问题,如果您希望我进一步澄清,请发表评论。


    编辑 1: 显然可以使用您自己的 DataTemplate 来覆盖不透明度更改。 How to have 100% opacity even when control is disabled in wpf C#


    编辑 2:我会给你一个如何正确使用其他属性的例子。

    这是您通常定义禁用按钮的方式,这样做会使文本更轻且可读性降低。

    <!-- Simple disabled button -->
    <telerik:RadButton Content="Test Button 1" IsEnabled="False" />
    
    <!-- Button with binding on IsEnabled -->
    <telerik:RadButton Content="Test Button 2" IsEnabled="{Binding MyBinding}" />
    

    现在我将向您展示如何使用属性IsHitTestVisibleFocusable 来模拟这些结果。

    <!-- Simple disabled button -->
    <telerik:RadButton Content="Test Button 1" IsHitTestVisible="False" Focusable="False" />
    
    <!-- Button with binding on IsEnabled -->
    <telerik:RadButton Content="Test Button 2" IsHitTestVisible="{Binding MyBinding}" Focusable="{Binding MyBinding}" />
    

    在上面的示例中,按钮看起来好像它们仍然处于启用状态。但是,您将无法聚焦或单击它们。当然,我们确实希望看到一些差异,以便能够判断它们不能被使用。

    <!-- Styled disabled button -->
    <telerik:RadButton Content="Test Button 1" IsHitTestVisible="False" Focusable="False" >
        <telerik:RadButton.Style>
            <Style TargetType="telerik:RadButton">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsHitTestVisible}" Value="False">
                        <Setter Property="Opacity" Value="0.8"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </telerik:RadButton.Style>
    </telerik:RadButton>
    

    【讨论】:

    • 感谢您的回答。更改 Opacity 属性的值没有帮助。你有变种吗?
    • 这不是我说的。当控件被禁用时,Opacity 会自动更改。要阻止它发生几乎是不可能的。您是否尝试过使用IsHitTestVisibleFocusable
    • 我试过的:` `
    • 我看到了你编辑的内​​容。但我不明白如何将它与 Telerik 控件一起使用
    • 要使用我在第一次编辑中发布的内容,您必须编写自己的自定义模板,就像在该示例中一样。特别是对于telerik,您可以查看隐式样式的文档。但是我添加了一个代码示例来说明我对这两个属性的含义,希望这可以进一步帮助您。