我在工具栏中有两个按钮,如果按钮已启用=false
我在窗口的资源中定义了样式和触发器:
<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>
在这里应该应用样式:
<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>
我注意到,第一个按钮不应用样式,因此不会改变对比度。而第二个按钮应用了我给它的样式。那么,为什么我的第一个按钮找不到资源?目标类型已设置...搜索向上进入逻辑树...
后来,我尝试了类似的东西,在DataGridTemplateColumn中使用一个按钮:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="thridButton"
IsEnabled="false"/>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
在 thrideButton 上,即使手动设置样式也无济于事。我几乎迷路了...谁能看出我的错误?
顺便说一下:IsEnabled 标志是使用数据绑定和转换器设置的。 由于手动设置样式时样式有效,因此我认为问题不在那里......
这是因为您已经明确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}
是用于其按钮样式的键工具栏。
您的资源样式有一个键。设置显式键后,您将覆盖它的隐式键,并且每当要使用它时,都需要声明该键。
只需从样式中删除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>