使用Property控制Adorner的可见性?

时间:2011-09-18 16:39:32

标签: c# .net wpf adorner

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

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

如果是这样,那么如何控制Adorner的知名度;我是否必须手动删除它/将其添加到依赖对象的OnChanged事件中的Adorner层?

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

注意:我甚至不确定它是否是正确的做事方式。我希望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
        }
    }
}

1 个答案:

答案 0 :(得分:3)

好吧,如果我理解你的问题,在WPF中你有两种方法可以做到这一点,从代码或XAML。从代码中,你或多或少已经做过,在XAML中你可以做这样的事情,我想:

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

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

  • XAML声明使得软件非常易于使用,但也更复杂(考虑到你的,或者你的群体可能性,不管怎么说,只要解决方案可用,在某种程度上做代码背后的东西是最好的)

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

修改

Defining custom Adorder in order to be able to define it in XAML