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" />...
所以,这处理禁用 属性。文字改变颜色,但不是对比度,有点像水印。
如何禁用它?并使禁用控件更具对比度?
Text changes its color, but it is not contrast, something like watermark.
供以后参考,这是由Opacity
属性引起的。当不透明度低于 1 时,它会变得更浅。
您描述的问题非常熟悉。恐怕没有任何好方法可以摆脱这种情况,以至于我能给你的最好建议就是不要打扰。如果有的话,它只会让使用主题和样式变得非常痛苦。
然而,通过将 IsEnabled="False"
属性 替换为 IsHitTestVisible="False"
和 Focusable="False"
,有一种简单的方法可以获得您想要的行为
这些将使无法通过键盘导航单击或聚焦控件,基本上使其禁用。现在您可以添加更多样式属性,使其看起来像您认为禁用的控件应该看起来的样子。例如,通过设置所需的 Foreground 和 Background 或者您甚至可以使用接近 1 的 Opacity (例如:0.9) 这将使它比原来的颜色更暗,但仍然足够深以正确阅读。
我希望这能帮助你解决当前的问题,如果你想让我进一步澄清,请发表评论。
编辑 1: 显然可以通过使用您自己的 DataTemplate
控件来覆盖不透明度更改。
编辑 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}" />
现在我将向您展示如何使用属性 IsHitTestVisible
和 Focusable
.
来模拟这些结果
<!-- 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>
我在使用 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" />...
所以,这处理禁用 属性。文字改变颜色,但不是对比度,有点像水印。
如何禁用它?并使禁用控件更具对比度?
Text changes its color, but it is not contrast, something like watermark.
供以后参考,这是由Opacity
属性引起的。当不透明度低于 1 时,它会变得更浅。
您描述的问题非常熟悉。恐怕没有任何好方法可以摆脱这种情况,以至于我能给你的最好建议就是不要打扰。如果有的话,它只会让使用主题和样式变得非常痛苦。
然而,通过将 IsEnabled="False"
属性 替换为 IsHitTestVisible="False"
和 Focusable="False"
,有一种简单的方法可以获得您想要的行为
这些将使无法通过键盘导航单击或聚焦控件,基本上使其禁用。现在您可以添加更多样式属性,使其看起来像您认为禁用的控件应该看起来的样子。例如,通过设置所需的 Foreground 和 Background 或者您甚至可以使用接近 1 的 Opacity (例如:0.9) 这将使它比原来的颜色更暗,但仍然足够深以正确阅读。
我希望这能帮助你解决当前的问题,如果你想让我进一步澄清,请发表评论。
编辑 1: 显然可以通过使用您自己的 DataTemplate
控件来覆盖不透明度更改。
编辑 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}" />
现在我将向您展示如何使用属性 IsHitTestVisible
和 Focusable
.
<!-- 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>