0

是否可以根据类中属性的值隐藏/显示 Adorner?

我应该为此目的使用附加属性吗?

如果是这样,如何精确控制 Adorner 的可见性;我是否必须手动删除它/将其添加到依赖对象的 OnChanged 事件中的装饰层?

这只是我正在尝试做的一个非常快速的代码表示:

注意:我什至不确定它是否是正确的做事方式。我希望 Adorner 的可见性由我的业务模型中的代码修改的属性的值来控制。附加属性的问题是它是控件的责任来更新属性的值,而不是我的业务域中的代码。)

public static class IsValidBehavior
{
    public static readonly DependencyProperty IsValidProperty = DependencyProperty.RegisterAttached("IsValid",
                                                                    typeof(bool),
                                                                    typeof(IsValidBehavior),
                                                                    new UIPropertyMetadata(false, OnIsValidChanged));

    public static bool GetIsValid(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsValidProperty);
    }
    public static void SetIsValid(DependencyObject obj, bool value)
    {
        obj.SetValue(IsValidProperty, value);
    }

    private static void OnIsValidChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
    {
        UIElement element = dependencyObject as UIElement;

        if (element == null)
            return;

        if ((bool)e.NewValue == true)
        {
            // Display the Adorner
        }
        else
        {
            // Hide the Adorner
        }
    }
}
4

1 回答 1

3

好吧,如果我正确理解了您的问题,WPF那么您有两种方法可以做到这一点,从代码或从XAML. 从代码中,你或多或少已经做了,在 XAML 中你可以做这样的事情,我认为:

Visibility="{Binding Path=MyVisibilityVariant, 
       Converter={StaticResource VisibilityConverter}}

换句话说,将它绑定到某个属性。我的一般建议:尽可能使用 XAML,考虑几个变体:

  • XAML 声明使软件非常可扩展,但也更复杂(考虑您或您的团队的能力,以某种方式在代码后面做一些事情是最好的,如果不仅有可用的解决方案)

  • 考虑到你的最后期限,因为在 XAML 的实现/调试/修复上,你会花更多的时间在代码上。

编辑

定义自定义 Adorder 以便能够在 XAML 中定义它

于 2011-09-18T17:19:09.970 回答