Visual Studio属性窗口中的依赖属性

时间:2012-09-25 16:29:36

标签: c# wpf wpf-controls dependency-properties

首先,我会给你我的代码,之后我会问我的问题。

namespace LinearGradientBrushBinding
{
    public partial class LinearGradBrush : UserControl
    {
        public LinearGradBrush()
        {
            InitializeComponent();
        }

        class LinearGradBrushProp : DependencyObject
        {
            public static DependencyProperty _background;

            static void BackgroundBrush()
            {
                _background = DependencyProperty.Register(
                    "_background", typeof(Brush), typeof(LinearGradBrushProp));
            }

            [Description("CuloareBG"), Category("Z")]
            public Brush Background
            {
                get { return (Brush)GetValue(_background); }
                set { SetValue(_background, value); }
            }
        }
    }
}

正如你所看到的,我有一个UserControl,里面有一个类。我的问题是为什么我没有在我的控件的属性窗口(UserControl.Xaml的右侧)中看到带有画笔的类别Z.

1 个答案:

答案 0 :(得分:0)

  

为什么我没有在属性窗口(UserControl.Xaml的右侧)中看到我用它中的画笔控制类别Z.

很简单,因为您的LinearGradBrush不包含使用类别Z注释的属性。

您的LinearGradBrush包含具有此类属性的(私有)内部类,但属性编辑器无法知道要为此内部类分配属性值的哪个实例。 (属性编辑器可能甚至无法看到这个内部类,因为它是私有的。)

我建议您将此属性移出内部类并删除该类。我不能老实地看到你需要在这里使用内部类的原因。

另外,我想指出你的依赖属性没有被正确声明。它没有使用正确的命名约定,我看不到对初始化依赖属性的BackgroundBrush()方法的任何调用。我希望该属性声明如下(注意字段的名称,它是readonly的事实,Register方法的第一个参数是属性的名称):< / p>

public static readonly DependencyProperty BackgroundProperty =
    DependencyProperty.Register("Background", typeof(Brush), typeof(LinearGradBrush));

[Description("CuloareBG"), Category("Z")]
public Brush Background
{
    get { return (Brush)GetValue(BackgroundProperty); }
    set { SetValue(BackgroundProperty, value); }
}

我对您的代码进行了此更改,切换到另一个XAML页面(即不是LinearGradBrush.xaml),并将您的控件作为元素<local:LinearGradBrush />添加到此XAML页面。当文本光标位于此元素上时,Background属性出现在属性窗口的Z类别中。