gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:32 24 4
gpt4 key购买 nike

我有一个名为 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)来注册它
  • 向类 A 添加静态 GetBorder2SetBorder2 方法。即使您的代码不调用这些方法,它们也是模式的一部分并且需要存在-- 它们是您告诉编译器是的,您确实希望人们能够在 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 的第一个参数的类型。

关于c# - 如何在用户控件中使用继承的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7408940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com