是否可以使用setter将属性返回到其默认值?

H.B*_*.B. 7 wpf setter styles wpf-controls

想知道是否可能,例如,如果我从TextBox中删除边框,并且我想在鼠标悬停时将其默认边框恢复.

    <Style TargetType="TextBox">
        <Setter Property="BorderBrush" Value="{x:Null}"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderBrush" Value="?????"/>
            </Trigger>
        </Style.Triggers>
    </Style>
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用它,但最后隐藏边界似乎是一个坏主意,但问题仍然存在.(我知道在这种情况下,如果鼠标不在TextBox上,我可以将Trigger反转为仅删除边框)

Ian*_*ths 5

它并没有真正起作用.DependencyProperty系统通过考虑众多不同的价值来源来工作.正如您在此处所看到的,样式设置器和样式触发器被视为单独的源.(它们在"依赖属性设置优先级列表"部分中分别编号为8和6.)无论哪个活动值源具有最高优先级获胜.

一种财产来源无法消除不同来源提供的价值.触发器能够将值从setter设置为更改的唯一原因是触发器具有更高的优先级.没有权力消除低优先级源提供的值.

实现您在此处表达的特定目标的方法是反转触发器的意义 - 不定义样式设置器,并且仅在IsMouseOverfalse 时才使触发器处于活动状态.当然,在您可能想要这样做的所有可能情况下,这都无济于事.但由于没有一般解决方案,我认为你需要以自己的方式解决每个具体问题.