繁体   English   中英

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

[英]WPF, Telerik: Change control style when disabled

我在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属性。 文本会更改其颜色,但不会改变对比度,例如水印。

如何禁用此功能? 并让禁用控件更具对比度?

文本会更改其颜色,但不会改变对比度,例如水印。

为了将来参考,这是由Opacity属性引起的。 当不透明度小于1时,它会变浅。

您正在描述的问题非常熟悉。 而且,恐怕没有什么好方法可以消除这个问题,以至于我最好能给您的建议就是不要再打扰。 如果有的话,这只会使主题和样式的使用成为现实。

但是,有一种简单的方法可以通过将IsEnabled="False"属性替换为IsHitTestVisible="False"Focusable="False"来获得所需的行为。
这些将使您无法通过键盘导航来单击或集中控制该控件,从而使其基本处于禁用状态。 现在,您可以添加更多样式属性,以使其看起来像您认为已禁用控件的外观。 例如,通过设置所需的“ 前景”和“ 背景”,或者甚至可以使用不透明度接近1(例如0.9)的方法,这将使其不比原始图像更暗,但仍然足够黑暗以至于无法正确读取。

希望这对您当前的问题有所帮助,如果您想让我进一步澄清,请发表评论。


编辑1:显然可以通过使用控件自己的DataTemplate覆盖不透明度更改。 即使在WPF C#中禁用控件,如何也具有100%的不透明度


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM