【问题标题】:WPF Opacity in a general style一般风格的WPF不透明度
【发布时间】:2017-03-11 08:41:50
【问题描述】:

我有这个style,它按预期工作。我正在尝试将其推广到所有控件。

问题:如果我将类型 ComboBox 替换为 Control。它不起作用了。 我试图避免为每种类型的控件创建样式。

<Style TargetType="{x:Type ComboBox}">
<Setter Property="IsEnabled" Value="{Binding Path=myProperty}"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="ComboBox.Opacity" Value="1" />
</Trigger>
</Style.Triggers>
</Style>

【问题讨论】:

    标签: wpf triggers styles opacity


    【解决方案1】:

    我认为没有办法完全按照您的意愿行事。虽然这不允许您避免为每种类型定义样式,但它确实通过使用 BasedOn 来继承您定义一次的样式来减少重复代码:

    <Resources>
        <Style x:Key="InvisibleWhenDisabled" TargetType="{x:Type Control}">
            <Setter Property="IsEnabled" Value="{Binding Path=myProperty}"/>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0" />
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style TargetType="ComboBox" BasedOn="{StaticResource InvisibleWhenDisabled}"/>
        <Style TargetType="Button" BasedOn="{StaticResource InvisibleWhenDisabled}"/>
    </Resources>
    

    【讨论】:

    • 它不起作用。在 Opacity 设置器中,已指定 ControlType.Opacity。否则,样式不会改变不透明度。
    • @John 肯定有其他事情发生。在我最简单的示例(窗口一个 ComboBox 和切换 combo.IsEnabled 的按钮)中,它正确地更改了不透明度。您将不透明度值设置为什么值?在您的原始示例中,您使用 Opacity="1" 这意味着 100% 不透明。
    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多