繁体   English   中英

如何在用户控件中使用继承的属性?

[英]How can I use my inherited property in a User Control?

我有一个名为A的UserControl类,其中包含一个Border属性。 然后其他类从A类继承,但是我不能使用新的Property。

public class A : UserControl
{

public A()
{
    Border2 = new Border();
    Border2.BorderBrush = Media.Brushes.LightGray;
}

public static readonly DependendyProperty Border2Property = DependencyProperty.Register("Border2", typeof(Border), typeof(A));

public Border Border2
{
    get { return (Border)GetValue(Border2Property); }
    set { SetValue(Border2Property, value); }
}
}

然后,当我使用从A继承的另一个类时,无法使用此Border2属性,我在写类似以下内容:

<local:A.Border2></...

但这告诉我Border2属性不支持Grid类型的值。

那是因为您已经创建了一个标准的依赖项属性。 如果要在A以外的其他类型上进行设置,则想创建一个附加属性。 这仅需要进行少量代码更改:

  • 通过调用DependencyProperty.RegisterAttached(而不是.Register)进行注册。
  • 将静态GetBorder2SetBorder2方法添加到类A。即使您的代码未调用这些方法,它们也属于模式的一部分,需要在其中使用-它们是如何告诉编译器是的,您确实打算人们可以在XAML中设置此附加属性。

例如:

public static readonly DependencyProperty Border2Property =
    DependencyProperty.RegisterAttached("Border2", typeof(Border), typeof(A));

public static Border GetBorder2(DependencyObject obj)
{
    return (Border) obj.GetValue(Border2Property);
}
public static void SetBorder2(DependencyObject obj, Border2 value)
{
    obj.SetValue(Border2Property, value);
}

如果您的属性仅对某些元素类型可用(例如,如果它仅适用于FrameworkElement及其后代,或者仅适用于Panel及其后代,或类似的东西),则将该属性用作GetBorder2的第一个参数的类型和SetBorder2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM