一般风格的WPF不透明度

时间:2017-03-10 18:10:41

标签: wpf triggers styles opacity

我有style按预期工作。我试图将它推广到所有控件。

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

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

1 个答案:

答案 0 :(得分: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>