如何在后台代码中取消设置元素值?

问题描述 投票:2回答:1

我有一个具有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中删除不透明度值,以允许样式再次实现不透明度?

c# wpf xaml border styling
1个回答
0
投票

据我所知,一旦设置了属性值,它将覆盖所有样式,并且无法“取消设置”它。我什至尝试将值设置回Double.NaN无济于事。

话虽如此,而不是在执行操作时直接设置值,您可以通过将样式替换为具有所需值的新样式来实现所需的功能。像这样的最高答案:How to add new setter programatically in existing ItemContainerStyle in WPF?

通过完全替换样式,可以完全控制其设置值。然后,当您要“取消设置”它时,只需将边框的样式设置回“ hoverOver”资源即可。

© www.soinside.com 2019 - 2024. All rights reserved.