我在工具栏中有两个按钮,如果Button isEnabled = false,我希望按钮的不透明度改变
我在我的窗口的资源中定义了Style和一个触发器:
<Window.Resources>
<Style x:Key="buttonOpacity" TargetType="Button">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.3" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
这里应该使用Style:
<ToolBar>
<Button Click="FirstClick"
IsEnabled="False">
<Image Height="24" Source="Ressources/First.png"/>
</Button>
<Button Click="SecondClick"
IsEnabled="False"
Style="{StaticResource buttonOpacity}">
<Image Height="24" Source="Ressources/Second.png"/>
</Button>
</ToolBar>
我注意到,第一个Button没有应用样式,因此不会改变不透明度。而第二个按钮适用我给它的样式。那么,为什么我的第一个按钮找不到资源? TargetType已设置...搜索向上移动逻辑树...
稍后,我在DataGridTemplateColumn中尝试了与Button类似的东西:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="thridButton"
IsEnabled="false"/>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
在thridButton上,即使手动设置样式也无济于事。我很丢失......有谁能看到我的错误?
顺便说一句:IsEnabled标志设置有数据绑定和转换器。由于Style在手动设置样式时起作用,我认为问题不存在......
答案 0 :(得分:1)
这是因为您已向您的x:key
明确Style
。所以为了应用样式必须明确地应用它。只需删除x:Key
,它就会应用于Window
中的所有按钮。
你也有工具栏中的按钮。工具栏在按钮上应用自己的样式,这就是默认情况下它们为平的原因。因此,为了覆盖默认样式,我们需要使用下面的保留键来定义样式:
<Style x:Key="{x:Static ToolBar.ButtonStyleKey}" TargetType="Button">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.2" />
</Trigger>
</Style.Triggers>
</Style>
请注意{x:Static ToolBar.ButtonStyleKey}
是关键工具栏用于其按钮样式。
答案 1 :(得分:0)
您的资源样式为key。设置显式密钥后,您将覆盖它的隐式密钥,并且需要在需要时使用该密钥。
只需从您的样式中删除x:Key="buttonOpacity"
即可隐式应用,或添加使用该密钥以使其明确应用
<ToolBar>
<Button Click="FirstClick"
Style="{StaticResource buttonOpacity}"
IsEnabled="False">
<Image Height="24" Source="Ressources/First.png"/>
</Button>
<Button Click="SecondClick"
IsEnabled="False"
Style="{StaticResource buttonOpacity}">
<Image Height="24" Source="Ressources/Second.png"/>
</Button>
</ToolBar>