2010-11-22 3 views
3

첨부 된 속성 값을 가져 와서 트리에서 부모로부터 시각적 계층 구조의 자식으로 전파하는 데 문제가 있습니다. 설정은 다음과 같습니다.첨부 된 속성 상속을 전파하는 중

Viewport3D를 인스턴스화하는 사용자 정의 패널이 있습니다. 그런 다음 Panel은 추가 및 제거 된 자식을 처리하여 각 자식 항목에 대해 상속 된 Visual3D 클래스를 만들고 추가합니다.

AttachedToggle 속성이라는 첨부 속성을 선언하려고합니다. 이 속성을 첨부 된 종속 속성 인 IsChecked를 구현하는 AttachedToggle이라는 외부 소유자 클래스에 상주시키고 부모 Panel 또는 하위 Visual3D 요소 중 하나가 값을 변경하고 다른 요소의 인스턴스를 가질 수있게하고 싶습니다. 값은 변경 사항을 반영합니다. Panel과 Visual3D 클래스는 공통 기반을 상속받지 않습니다. 이 작업을 수행 할 수 있습니까?

IsChecked의 부모 및 자식 인스턴스 값을 Set/GetValue를 사용하여 응용 프로그램 코드에서 성공적으로 변경할 수 있지만 변경 내용을 전파 할 수 없습니다.

+0

RegisterAttached를 수행 할 때 메타 데이터에 상속 옵션을 포함 시켰습니까? http://msdn.microsoft.com/en-us/library/ms753197.aspx –

답변

1

임 연결된 속성은 논리적 트리를 아래로 전달 될 수 없습니다 있는지,하지만 당신은 이런 식으로 뭔가를 시도 할 수 :

<Panel a:ToggleSwitch="Binding Path=(a:ToggleSwitch), 
      RelativeSource={RelativeSource Mode=FindAncestor, 
      AncestorType={x:Type Panel}}" /> 
+2

그것은 훨씬 더 값 비싼 성능 현명한 것입니다. –

16

이것은 Property Value Inheritance의 문서에 따르면, 잘 작동합니다. Inherits 플래그 - 주

public static readonly DependencyProperty IsChecked = 
    DependencyProperty.RegisterAttached(
    "IsChecked", 
    typeof(Boolean), 
    typeof(AttachedToggle), 
    new FrameworkPropertyMetadata(false, 
     FrameworkPropertyMetadataOptions.Inherits) 
); 

: 재산을 등록하는 통화의 모습을 확인합니다. FrameworkPropertyMetadata (및 FrameworkPropertyMetadataOptions- 필요한 경우 OverridesInheritanceBehavior을 사용할 수 있음)에 대한 문서를 참조하십시오.

+3

문서에 따라 일만 항상 수행되는 경우. 예, FrameworkPropertyMetadataOptions.Inherits가 DP에 설정됩니다. 그러나 여전히 예상대로 작동하지 않습니다. – giri

관련 문제