【问题标题】:How to unset an element value in code-behind? [duplicate]如何在代码隐藏中取消设置元素值? [复制]
【发布时间】:2020-09-15 04:07:33
【问题描述】:

我有一个 xaml border 元素,它具有 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】:

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

    话虽如此,您可以通过将样式替换为具有所需值的新样式来实现您想要的,而不是直接设置值。像这样的顶级答案:How to add new setter programatically in existing ItemContainerStyle in WPF?

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

    【讨论】:

      【解决方案2】:

      您应该清除依赖属性的值,而不是将其设置为0

      border1.ClearValue(UIElement.OpacityProperty);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 2012-03-26
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        相关资源
        最近更新 更多