2012-10-23 5 views
0

WPF에서 다른 메뉴 항목 헤더를 클릭 할 때 콘텐츠 템플릿을 변경하는 방법을 알려주십시오. 템플릿으로 사용할 수있는 사용자 정의 컨트롤을 정의했습니다.메뉴 항목에서 Conent Control 템플릿을 변경 하시겠습니까?

예 : 메뉴 항목 : 홈, 플레이어, 팀. 내가 홈을 클릭 할 때, 내 콘텐트 컨트롤의 특정 템플릿을 팝업으로 표시하고, 플레이어를 클릭하면 tehen으로, 다른 템플릿 (플레이어 목록)을 콘텐트 컨트롤에서 템플릿으로 표시하려고합니다.

XAML에서 트리거를 사용하여이를 수행하는 방법은 무엇입니까?

은 대단히 감사합니다 :)

답변

2

ContentControl을 사용하면 콘텐츠를 호스팅하고 내용을 그리는 방법에 따라 ContentControl.ContentTemplate을 설정할 수 있습니다. 아주 기본적인 예를 들어

,

<ContentControl x:Name="MyContentControl"> 
    <ContentControl.Style> 
     <Style TargetType="{x:Type ContentControl}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding }" Value="Home"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <local:MyHomeUsercontrol /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding }" Value="Players"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <local:MyPlayersUsercontrol /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding }" Value="Team"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <local:MyTeamUsercontrol /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 

그리고 당신은 클래스 객체 등을 사용했다 그러나 만약 내가 ContentControl.Content에 대한 string을 사용하고이 예에서 MenuItem.Click

MyContentControl.Content = "Home"; // or "Players" or "Team" 

HomeViewModel 또는 PlayersViewModel으로 XAML을 단순화하여 WPF가 특정 클래스를 그릴 때마다 자동으로 사용되는 템플릿 인 암시 적 데이터 템플릿을 사용할 수 있습니다

<Window.Resources> 
    <DataTemplate DataType="{x:Type HomeViewModel}"> 
     <local:MyHomeUserControl /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type PlayersViewModel}"> 
     <local:MyPlayersUserControl /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type TeamViewmModel}"> 
     <local:MyTeamUserControl /> 
    </DataTemplate> 
</Window.Resources> 

<ContentControl x:Name="MyContentControl" /> 

MyContentControl.Content = new HomeViewModel(); 
0

어떻게 상단에있는 탭 위치와 탭 컨트롤을 사용하는 방법에 대한? 그런 식으로 훨씬 깨끗합니다.

편집; 예 :

<TabControl> 
     <TabItem> 
      <TabItem.Header> 
       <TextBlock Text="Football header!"/> 
      </TabItem.Header> 
      <TabItem.Content> 
       <Button Content="Push for football!"/> 
      </TabItem.Content> 
     </TabItem> 
    </TabControl> 

http://www.switchonthecode.com/tutorials/the-wpf-tab-control-inside-and-out

+0

그래서, 다음 탭 항목에서 나는 템플릿을 정의? – Flipper

+0

올바른지, 탭 항목에서 헤더에 내용을 넣을 곳이 있고 필요한 경우 TabHeaderTemplate을 사용하여 헤더 스타일을 지정할 수도 있습니다. – Steoates

+0

@Flipper 업데이트 된 코드를 참조하십시오. – Steoates