2012-01-30 2 views

답변

3

Here은 TabControl 탭 템플릿에 대한 예제 프로젝트입니다. 아마도 "자동", * 및 "자동"너비의 세 열이있는 표를 사용하고 첫 번째 열에 StackPanel을 놓고 탭의 첫 번째 세트를 잡고 마지막 열을 그 중간의 마지막 열에 넣으십시오 열이 비어 있고 나머지 공간을 차지합니다.

4

이 게시물은 오래된 것일 수 있지만 같은 질문에 대한 답변을 검색하는 동안 우연히 발견되어 결국 내가 생각한 빠르고 빠지기 쉬운 해결책을 공유하게되었습니다. OnTabFocused 이벤트 처리기에서,

<Grid> 
    <TabControl x:Name="_tabsRight" GotFocus="OnTabFocused" > 
     <TabControl.Resources> 
      <Style TargetType="TabPanel"> 
       <Setter Property="HorizontalAlignment" Value="Right"/> 
      </Style> 
     </TabControl.Resources> 

     <TabItem x:Name="JustAHiddenTabItemToDeselectTheRealOne" Visibility="Hidden" /> 

     <!-- Last tab --> 
     <TabItem Header="Last one" > 
      <!-- Last content... --> 
     </TabItem> 

    </TabControl> 
    <TabControl x:Name="_tabsLeft" GotFocus="OnTabFocused" > 

     <!-- First tab --> 
     <TabItem Header="1st" > 
      <!-- First content... --> 
     </TabItem> 

     <!-- Second tab --> 
     <TabItem Header="2nd" > 
      <!-- Second content... --> 
     </TabItem> 

    </TabControl> 
</Grid> 

다음 :

난 그냥 그리드에서 서로의 상단에 두 개의 TabControls를 넣어 (감사 Meleak에 외출) 중 하나의 탭 패널을 오른쪽으로 정렬 당신이 개 왼쪽에있는 탭과 오른쪽에 하나를 가지고 싶다면

private int _zIncrementor = 0; 
/// <summary> 
/// Hack to make two TabControls act as one. 
/// </summary> 
private void OnTabFocused(object sender, RoutedEventArgs e) 
{ 
    var tab = (TabControl)sender; 
    var otherTab = (tab == _tabsLeft) ? _tabsRight : _tabsLeft; 

    Grid.SetZIndex(tab, ++_zIncrementor); 
    otherTab.SelectedItem = null; 
} 
+1

내가 기본 탭을 클릭 할 수 없습니다 : 여기

샘플 코드를

<TabControl x:Name="_tabsLeft" GotFocus="OnTabFocused" > <!-- First tab --> <TabItem Header="1st" > <!-- First content... --> </TabItem> <!-- Second tab --> <TabItem Header="2nd" > <!-- Second content... --> </TabItem> <!-- Third invisible tab --> <TabItem Header="Im not visible in UI" Visibility="Hidden" x:Name="invisibletab" > <!-- I'm not visible in UI... --> </TabItem> <!-- Last tab --> <TabItem Header="Last one" > <!-- Last content... --> </TabItem> </TabControl> 

백엔드 코드입니다. 다음 코드를 통해 mousedown 이벤트 처리기를 추가했습니다. private void _tabs_MouseLeftButtonDown (object sender, MouseButtonEventArgs e) { Point pt = e.GetPosition ((UIElement) sender); var element = this.InputHitTest (pt) as System.Windows.Controls.Primitives.TabPanel; if (element! = null && _tabsLeft.IsAncestorOf (element)) { _tabsRight.Focus(); _tabsRight.SelectedIndex = 1; } } – Derrick

+1

@ 데릭 - 감사합니다! 나에게 제안 된 대답은 디버그 모드에서 잘 작동했지만, 결국 응용 프로그램을 릴리스했을 때 비슷한 트릭을 수행해야한다는 것을 알았습니다. – Sphinxxx

-1

, 당신 선적 지시 밖에 해줄 세 번째 보이지 않는 탭이 할 수 있습니다 : 사용자가 TabItem의를 클릭 할 때, 우리는 앞으로 가장 아래에 TabControl을 가지고 필요 보이지 않는 탭의 width은 나머지 공간을 제공하는 의 Actualwidth에서 보이는 세 개의 탭 중 Width을 뺍니다.

public MainWindow() 
{ 
    InitializeComponent();  
    this.SizeChanged += window_SizeChanged; 
} 
private void window_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    invisibletab.Width = this.ActualWidth - 550; // where the 550 is the sum of the actual width of visible tabs 
} 
+0

Downvoters. . 윌이 왜이 downvoted에 대한 의견을 남겨주세요. 이것은 질문에 대한 가장 간단한 작업 솔루션입니다. – Gopichandar

관련 문제