WPF,Telerik:禁用时更改控件样式

时间:2017-10-17 17:00:44

标签: c# wpf xaml telerik raddropdownbutton

我在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属性。文字会改变颜色,但不是对比,就像水印一样。

如何禁用此功能?并使禁用控制更具对比度?

1 个答案:

答案 0 :(得分:0)

  

文字会改变颜色,但不是对比,就像水印一样。

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

您所描述的问题非常熟悉。而且我担心没有任何好办法摆脱这种情况,以至于我能给你的最佳建议就是不要打扰。如果有的话,它只会使主题和风格成为真正的痛苦。

但是,通过将IsEnabled="False"属性替换为IsHitTestVisible="False"Focusable="False",可以轻松获得所需行为
这些将使得无法通过键盘导航单击或聚焦控件,基本上使其禁用。现在,您可以添加一些样式属性,使其看起来像您认为禁用的控件应该是这样的。例如,通过设置所需的前景背景,您甚至可以使用接近1的不透明度(例如:0.9),这样可以减少比原来黑暗但仍然很暗,可以正常阅读。

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

编辑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>