簡體   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