我有一个具有border
效果的xaml isMouseOver
元素。基本上,它会将border
上背景的不透明度从0
更改为0.2
,以便您可以清楚地看到您将鼠标悬停在边框上。这是border
:
<Style TargetType="{x:Type Border}" x:Key="hoverOver">
<Setter Property="Border.Background" Value="LightGray"/>
<Setter Property="Border.Opacity" Value="0"/>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Border.Opacity" Value="0.2"/>
</Trigger>
</Style.Triggers>
</Style>
<Border x:Name="border1" Height="50" Width="350" Style="{StaticResource hoverOver}"/>
注:确保您看到边框的不透明度是在样式中设置的,而不是在元素本身中设置的。这很重要。
在我的代码中,用户“选择”了边框(例如,我通过调用border1.opacity = 0.2
为元素的不透明度设置了一个永久值)。现在,已在元素中设置了不透明度值,即使我设置了border1.opacity = 0
,样式也不再起作用。
您可以通过设置边框的不透明度来自己尝试。当您将鼠标悬停在它上面时,它什么也不会做,因为您在元素而不是样式中设置了不透明度。只要您在元素中设置值,样式就不会对其进行任何更改。
我如何“取消设置”值并从border
中删除不透明度值,以允许样式再次实现不透明度?
据我所知,一旦设置了属性值,它将覆盖所有样式,并且无法“取消设置”它。我什至尝试将值设置回Double.NaN无济于事。
话虽如此,而不是在执行操作时直接设置值,您可以通过将样式替换为具有所需值的新样式来实现所需的功能。像这样的最高答案:How to add new setter programatically in existing ItemContainerStyle in WPF?
通过完全替换样式,可以完全控制其设置值。然后,当您要“取消设置”它时,只需将边框的样式设置回“ hoverOver”资源即可。