gpt4 book ai didi

wpf - WPF 触发值能否在触发条件之外持续存在?

转载 作者:行者123 更新时间:2023-12-04 06:52:23 33 4
gpt4 key购买 nike

我有 WPF 触发器的问题。在我的应用程序中,我使用了一个多触发器,但希望实现在触发器条件变为真时所做的更改以保持不变,并且不会在触发器条件再次变为假时失效。
是否有可能实现我想要的?

提前致谢。

最佳答案

触发器没有任何内存:一旦触发器变得不适用,触发器的 setter 就不会应用。您需要一个一旦设置就“锁定”的条件。这可以通过一段非常简单和通用的代码来完成。

首先,您需要一个可以“锁定”的附加属性。这是一个带有“IsLocked”附加属性的简单类,只要设置了“DoLock”属性,它就会变为真,并从那时起保持这种状态:

public class LockingProperty : DependencyObject
{
// IsLocked
public static bool GetIsLocked(DependencyObject obj) { return (bool)obj.GetValue(IsLockedProperty); }
public static void SetIsLocked(DependencyObject obj, bool value) { obj.SetValue(IsLockedProperty, value); }
public static readonly DependencyProperty IsLockedProperty = DependencyProperty.RegisterAttached("IsLocked", typeof(bool), typeof(LockingProperty));

// DoLock
public static bool GetDoLock(DependencyObject obj) { return (bool)obj.GetValue(DoLockProperty); }
public static void SetDoLock(DependencyObject obj, bool value) { obj.SetValue(DoLockProperty, value); }
public static readonly DependencyProperty DoLockProperty = DependencyProperty.RegisterAttached("DoLock", typeof(bool), typeof(LockingProperty), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) => { SetIsLocked(obj, true); }
});
}

现在您可以使用两个单独的触发器模拟锁定触发器:
<Triggers>
<Trigger ... your trigger conditions here ...>
<Setter Property="my:LockingProperty.DoLock" Value="true" />
</Trigger>
<Trigger Property="my:LockingProperty.IsLocked" Value="true" />
... your setters here ...
</Trigger>
</Triggers>

请注意,此示例中的第一个触发器可以是 Trigger、DataTrigger、MultiTrigger 或 MultiDataTrigger - 表达触发条件所需的任何内容。

关于wpf - WPF 触发值能否在触发条件之外持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943658/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com