2011-09-13 4 views
2

A라는 UserControl 클래스가 있는데 Border 속성이 포함되어 있습니다. 그런 다음 다른 클래스는 A 클래스에서 상속되지만 새 Property는 사용할 수 없습니다. 나는 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); } 
} 
} 

그럼,이 Border2 속성을 사용할 수 없습니다, 내가 좋아하는 뭔가를 쓰고 있어요 :

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

을하지만 Border2 속성이하지 않는 것을 알려줍니다 Grid 유형의 값을 지원합니다.

답변

1

표준 종속성 속성을 만들었 기 때문입니다. A 이외의 다른 유형에서도이 설정을 원하면 속성을 대신 생성해야합니다.

  • 코드는 다음을 호출하지 않는 경우에도
  • 는 클래스 A에 정적 GetBorder2SetBorder2 방법을 추가 (대신 .Register의) DependencyProperty.RegisterAttached를 호출하여 등록 :이 코드 변경의 소수 걸립니다 만 메소드의 일부이며 패턴의 일부이며 거기에 있어야합니다. 예를 들어 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의 첫 번째 매개 변수 유형으로 사용하십시오.

+0

나는 그것을 이해할 것 같지만, 내가 얻지 못하는 것이있다. XAML에서 그 가치를 얻고 사용자 정의 컨트롤에 코드를 쓰지 않는 것이 가능한가? – Darf

+0

"XAML에서 그 가치를 얻으십시오"라는 것이 무슨 뜻인지 몰라요. XAML은 값을 읽는 것이 아니라 값을 설정하는 것입니다. XAML에서 "* set * value"를 의미한다면, 그렇습니다. 절대적으로 - 이것이 정확히 무엇을 의미합니다. 일단이 패턴을 구현하면 컴파일러는 XAML에서 A. 인스턴스가 아닌 모든 유형의 A.Border2를 설정할 수 있습니다. –

관련 문제