我有一个名为A的UserControl类,其中一个包含Border属性。然后其他类继承自A类,但我不能使用我的新属性。
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类型的值。
答案 0 :(得分:1)
那是因为你已经创建了一个标准的依赖属性。如果您希望能够将其设置为除A之外的其他类型,则需要创建附加属性。这只需要进行一些代码更改:
GetBorder2
和SetBorder2
方法添加到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的第一个参数的类型。