2009-02-27 2 views
0

Outlook 2007과 마찬가지로 NavigationPane을 만들었습니다. Outlook에서 창을 축소하고 사이드 바를 클릭하면 Selected NavigationItem 콘텐츠를 팝업하는 데 사용됩니다. ControlTemplete (하나는 TabControl의 SelectItemHost 용이고 다른 하나는 Popup 용)에 contentpresenter를 사용하여 동일한 동작을 모방했습니다. 그러나 문제는 Popup이 열려 있고 NavigationPane이 떨어져있을 때 콘텐츠를 선택했으며 다른 탐색 항목에서 동일한 탐색 항목으로 다시 전환 할 때 나타납니다. TabControl과 TabItem을 NavigationPane과 NavigationPaneItem으로 사용하고 있습니다.ContentTemplate의 단일 Content 또는 ContentSource에서 두 ContentPresenter를 가리킬 수 있습니까?

나는

+0

일부 XAML을 게시하면 사람들이 쉽게 도움을 줄 수 있습니다. –

+0

나는 내가 말하고있는 것을 ilustrates하는 간단한 예제를 업로드 할 것이고, 그것은 무언가를 업로드하고 내 질문에 첨부 할 수있는 방법이있다. – Javier

+0

일반적으로 자신의 질문을 편집합니다 ... 1 명과 함께 할 수 있는지 확실하지 않습니다. 옵션을 사용할 수없는 경우 질문에 답장하십시오. – Adrian

답변

2

당신은 컨트롤 템플릿 내에서 두 ContentPresenter 객체를 정의하고 만약 당신이 좋아하면 동일한 컨텐츠 소스에서 둘 다 가리킬 수 두 ContentPresenter에의 ContentSource로 "SelectedContent"을 가리키는 오전 :

<ControlTemplate x:Key="WeirdButton" TargetType="Button"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Border Grid.RowSpan="2" Background="{TemplateBinding Background}" /> 
     <ContentPresenter ContentSource="Content"/> 
     <ContentPresenter ContentSource="Content" Grid.Row="1"/> 
    </Grid> 
</ControlTemplate> 

그러나 이것은 약간 특이한 부작용이 있습니다. 시각적 트리의 두 위치에 동일한 시각적 요소를 넣을 수 없기 때문에이 템플릿은 단추의 자식 내용이 시각적이지 않은 경우 (또는 Visual에서 파생 된 경우)에만 예상대로 작동합니다. 콘텐츠가 다른 유형의 데이터이고 데이터 템플릿에 의해 시각 자료가 생성되면 모든 것이 예상대로 작동합니다. 버튼의 내용을 문자열 (<Button Content="OK"/>)로 설정하는 것도 효과가 있습니다. 이 같은 효과는 시각적 브러시로 얻을 수있는

참고 :

<ControlTemplate x:Key="WeirdButton" TargetType="Button"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Border Grid.RowSpan="2" Background="{TemplateBinding Background}" /> 
     <ContentPresenter x:Name="presenter" ContentSource="Content"/> 
     <Rectangle Grid.Row="1" 
        Width="{Binding ActualWidth, ElementName=presenter}" Height="{Binding ActualHeight, ElementName=presenter}"> 
      <Rectangle.Fill> 
       <VisualBrush Visual="{Binding ElementName=presenter}" Stretch="None" AlignmentX="Left"/> 
      </Rectangle.Fill> 
     </Rectangle> 
    </Grid> 
</ControlTemplate> 

이 방법의 단점은 시각적 브러시 컨트롤과 상호 작용할 수 없다는 것입니다. 따라서 복제본의 버튼, 텍스트 상자 및 기타 컨트롤을 상호 작용하기를 원할 경우 첫 번째 템플릿에 가까운 접근 방식을 따라야합니다.

관련 문제