2009-12-08 2 views
23

TabItem.Header를 몇 가지 필드에서 취한 바인딩으로 설정하려면 어떻게해야합니까? 각 바인딩은 다른 크기로 표시됩니다. 모두 원래의 헤더 텍스트 대신 사용하십시오. ; 헤더의 기본 스타일과 동작을 재정의하지 않고 텍스트 만 필요합니다.TabControl.ItemTemplate : TabFormem.Header.Text를 StringFormat을 사용하는 MultiBinding으로 설정하십시오.

템플릿을 설정하려고했지만 내부 컨트롤이 포함 된 사각형을 만들고이 클릭은 사용자 클릭에 반응하지 않으며 제어 스타일이 보이기 때문에이 컨트롤을 보이지 않게하고 싶습니다. 텍스트가 표시되어야합니다.

나는 다음 시도했다 :

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TabItem> 
       <TabItem.Header> 
        <MultiBinding StringFormat="{}{0}-{1}"> 
         <Binding Path="Title"/> 
         <Binding Path="Category.Title"/> 
        </MultiBinding> 
       </TabItem.Header> 
       <TabItem.Content> 
        <TextBlock> 
         Here is what is gonna be in the TabItem - not header 
        </TextBlock> 
       </TabItem.Content> 
      </TabItem> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

을하지만 아무것도 표시되지 않습니다.

또한 HeaderTemplate을 DataTemplate으로 설정하려고했으나 DataTemplate이 TabItem 스타일을 무시하고 클릭 한 탭으로 이동하지 않은 텍스트를 클릭 할 때 선택되지 않은 탭이 매우 보입니다. 우스운 이야기지만 투명하게 보이고 싶을 때 텍스트의 사각형이 떠있는 것을 보았습니다.

따라서 제 질문을 요약하기 위해 TabItem.Header.Text를 StringFormat을 사용하여 MultiBinding으로 설정하려고합니다.

+3

나는이 질문에 몇 시간 전에 거의 같은 대답을했다. 그러나 질문이 삭제되고 재 게시 된 것 같습니다. – Dabblernl

+0

이 질문의 이전 버전을 삭제 한 이유는 무엇입니까? 왜 당신이 묻는 곳을 바꾸고, 그 취지에 대한 의견을 남겨 두지 않고, 그 답을 그들이 놓친 사실을 알리며, 거기서 쓰레기를 버리는 것이 어떨까요? –

답변

61

TabControl에는 ContentTemplate 속성과 ItemsControl에서 상속 한 ItemTemplate 속성이 포함되어 있습니다. ContentTemplate을 사용하여 Content 영역에 표시되는 내용과 머리글에 대한 템플리트를 정의하는 ItemTemplate을 구분합니다. 또한 ItemSource의 각 Item은 자동으로 TabItem에 래핑됩니다. ItemTemplate에서 다시 만들 필요가 없습니다. TabItem을 Header 내부에 배치하려고합니다.

ItemTemplate에서 TabItem을 다시 만드는 대신 ItemTemplate을 사용하여 머리글 내용을 정의하고 ContentTemplate을 사용하여 내용을 정의하십시오.

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="{}{0}--{1}"> 
         <Binding Path="Title" /> 
         <Binding Path="Category.Title" /> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyContent}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

첫 단락에서 헤더의 바운드 부분에 다른 크기를 설정하고 싶다고 언급했습니다. 그렇게하고 싶다면 위에서 한대로 Binding 또는 MultiBinding을 사용하여 Text를 설정할 수 없습니다. 대신 TextBlock을 중첩시켜 각각에 대해 서로 다른 형식으로이 작업을 수행 할 수 있습니다.

<TabControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock> 
      <TextBlock Text="{Binding Title}" 
         FontSize="12" /> 
      <Run Text="--" /> 
      <TextBlock Text="{Binding Category.Title}" 
         FontSize="10" /> 
     </TextBlock> 
    </DataTemplate> 
</TabControl.ItemTemplate> 
+0

스타일 타겟 유형은 무엇입니까? TabItem은 버튼에 대한 것이지만 페이지는 무엇입니까? – Patrick

+0

그건 정말 아주 까다로운 일이었습니다. +1 –

관련 문제