2016-12-15 1 views
1

저는 ContentObject 속성을 가진 사용자 정의 컨트롤이 있으며 사용자 지정 콘텐츠를 지정하는 데 사용합니다. 내 메인 윈도우에서 종속 속성에 바인딩 된 중첩 레이블을 만들었습니다.ContentPresenter 자식 요소를 외부 컨트롤에 이름으로 바인딩 할 수 없습니다.

MainWindow.xaml :

<Window x:Class="TestContentPresenter.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:TestContentPresenter" 
     Title="MainWindow" Height="350" Width="525" Name="MyWindow"> 
    <Grid> 
     <local:MyUserControl> 
      <local:MyUserControl.ContentObject> 
       <!--<TextBlock Text="{Binding MyText, ElementName=MyWindow}"/>--> 
       <TextBlock Text="{Binding MyText, RelativeSource={RelativeSource AncestorType=Window}}"/> 
      </local:MyUserControl.ContentObject> 
     </local:MyUserControl> 
    </Grid> 
</Window> 

UserControl.xaml :

<UserControl x:Class="TestContentPresenter.MyUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:TestContentPresenter" 
      Height="300" Width="300" Name="MainControl"> 
    <StackPanel> 
     <ContentPresenter Content="{Binding ContentObject, ElementName=MainControl}"/> 
    </StackPanel> 
</UserControl> 
내가 RelativeSource와 바인딩,하지만 난 이름 요소를 참조하는 경우 어떤 이유로 작동하지 않는 경우 잘 작동

주 창에 MyText 종속성 속성이 있으며 주석 처리 된 선은 작동하지 않습니다. 나는 이것이 이름 범위와 관련이 있다고 의심하지만, 내가 잘못하고있는 것은 무엇인가?

답변

1

아니요, 실제로 아무 잘못도 없습니다. TextBlock의 Text 속성에 대한 바인딩이 해결되면 그 범위에 "MyWindow"라는 요소가 없습니다. UserControl의 ContentObject 속성을 TextBlock으로 설정했지만 UserControl이 결국 렌더링하면 "MyWindow"이름에 대해 아무것도 모릅니다.

TextBlock에 항상 부모 창이 있으므로 ElementName을 RelativeSource로 바꾸면 해결할 수 있습니다. ElementName은 작동하지 않습니다.

+0

Window의 relativeSource에 대한 바인딩이 적절하지 않은 다른 사용자 정의 컨트롤에서 어떻게 활용할 수 있습니까? – Gui

관련 문제