2012-09-03 4 views
1

UserControl에 ContentPresenter가 있습니다. ContentPresenter의 내용은 데이터 객체이고 DataTemplate은 ContentPresenter의 UI를 정의합니다 (루트는 다른 UserControl 임).XAML에서 ContentPresenter의 시각적 내용에 어떻게 바인딩 할 수 있습니까?

외부 UserControl의 단추는 내용을 ContentPresenter가 호스팅하는 내부 UserControl에 정의 된 연결된 속성 값에 바인딩해야합니다. XAML에서 어떻게합니까?

서로 다른 이름 범위 또는 템플릿 경계에서 정의 된 시각적 개체가 상호 작용할 수있는 좋은 방법은 무엇입니까?

+2

정말 그렇게해서는 안됩니다 ... –

답변

0

비슷한 문제가 있습니다. 결국 코드 숨김에서 정렬했습니다. XAML이 좋지 않은 몇 가지 사항이 있습니다.

내 DataTemplate의 루트 UserControl의 Top 속성을 포함하고있는 ContentPresenter의 Canvas.Top 연결된 속성에 바인딩해야했습니다. 필자의 경우 ContentPresenter는 DataTemplate을 기본 데이터 객체 컬렉션에 적용하는 ItemsControl에 의해 생성되었습니다. ContentPresenter의 Content 속성은 참조해야하는 Visual 개체가 아니라 기본 데이터 개체를 가리 킵니다. 이것이 당신이 직면 한 문제는 아니지만, ContentPresenter의 Visual 컨텐트에 대한 참조를 찾으려고 노력하는 것의 핵심은 같다고 생각합니다.

가장 안쪽의 UserControl에 대한 코드에서 EndInit 메서드를 재정 의하여 바인딩을 연결했습니다. 한 가지 상황에서만 컨트롤을 사용할 계획 이었기 때문에 나에게 용인 될 수 있었지만 코드는 상황에 맞게 다른 위치로 이동할 수있었습니다.

/// <summary> 
/// Indicates that the initialization process for the element is complete 
/// </summary> 
public override void EndInit() 
{ 
    this.BindToParentContentPresenter(); 
    base.EndInit(); 
} 

/// <summary> 
/// Binds the Canvas.Top attached property of the content presenter to the top property of this object 
/// </summary> 
private void BindToParentContentPresenter() 
{ 
    ContentPresenter cp = this.VisualParent as ContentPresenter; 
    if (cp != null) 
    { 
     Binding b = new Binding(); 
     b.Source = this; 
     b.Path = new PropertyPath(TopProperty); 
     cp.SetBinding(SelectableUniformCanvas.TopProperty, b); 
    } 
} 
관련 문제