1

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

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。

4

1 回答 1

0

为什么我在控件的“属性”窗口(UserControl.Xaml 的右侧)中看不到带有画笔的类别 Z。

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

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

我建议您将此属性移出内部类并摆脱该类。老实说,我看不出你需要在这里使用内部类的原因。

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

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),并将您的控件作为元素添加到此 XAML 页面<local:LinearGradBrush />。当文本光标位于该元素上时,该Background属性出现在Z属性窗口的类别中。

于 2012-09-25T21:50:24.577 回答