2008-10-15 9 views
5

TabControl의 첫 번째 및 마지막 TabItem에 스타일을 설정하고 TabItem의 가시성이 변경되면 해당 스타일을 업데이트하려고합니다. 나는 방아쇠로 그렇게 할 수있는 방법을 볼 수 없다.TabControl의 첫 번째 및 마지막 표시 TabItem에 스타일 설정

| > > > |

그리고 TabItems의 가시성이 바인딩에 의해 결정된다 : 우리가 같은 외모 뒤에있어

.

코드로 작업하고 있습니다. TabItem 표시 여부가 변경되면 처음 보이는 항목을 찾을 때까지 TabItems를 열거하십시오. 그 스타일을 설정하십시오. 보이는 다른 모든 TabItem에 대해 pointy 스타일로 설정하십시오 (이전에 처음 보이는 항목이 이제 pointy가되도록). 그런 다음 가시적 인 TabItem을 찾고 마지막 스타일을 설정할 때까지 끝에서부터 시작하십시오. (이는 또한 TabControl에서 보이는 TabItem이 하나도 선택되지 않은 경우 보이지 않는 TabItem의 내용을 표시하는 문제를 해결할 수 있습니다.)

내 방법은 분명히 개선되었지만, 그것이 올바른 접근법이라고 확신하지 못합니다.

어떻게 접근하나요? 지금까지 더 나은이 조금 설명 할 수

+0

가 직접 솔루션을보고하지, 나는 사용자 지정을 TabControl 건물 생각할 수 있습니다. 그러나 가시성은 tabitem을 레이아웃하는 Panel의 종류에 따라 달라집니다. –

+0

우리는 WrapPanel을 사용하고 있습니다. 머리말은 겹치는 화살표이며 시작과 끝은 정사각형이어야합니다. TabItem 가시성이 변경된 스타일을 적용하여 코드 작업을 수행했지만 다른 사용자가 생각하는 것이 궁금합니다. – Donnelle

답변

1

죄송합니다 나는 그래서 질문을 해석 한 :

특정 스타일을 적용 탭 컨트롤의 시작과 끝의 탭의 항목에 대한 가시성 변경시 - 경우 즉, 보기 밖으로 스크롤 한 다음 스타일을 변경합니까?

이 당신이 당신의 TabItems을 (프로그래밍 방식이나 WPF에서) 당신이 처리하고자하는 TabItems에 IsVisibleChanged 이벤트 핸들러를 구현해야합니다 (즉, 첫 번째와 마지막 또는 모든?)합니다

추가로, 다음 그렇다면 그 TabControl에 뷰에있는 동안 우리 TabItems의 가시성이 영향을받지 않습니다, 그래서 우리는 스타일을 적용 할 수
public Window1() 
    { 
     InitializeComponent(); 

     this.myTabItem.IsVisibleChanged += new DependencyPropertyChangedEventHandler(myTabItem_IsVisibleChanged); 
    } 

    private void myTabItem_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
    { 
     myTabControl.Items[0].Style = FindResource("MyTabItemStyle") as Style; 
    } 

프로그래밍 컨트롤에 탭 항목을 추가 할 경우는 간단합니다 ... :)

+2

정신적 인 이미지로서 각 TabItem은 화살표 모양입니다. >>> | 첫 번째와 마지막 것에는 사각형 끝이 있습니다. TabItem 0이 보이지 않으면 TabItem 1에 사각형 스타일이 있어야합니다. TabItems의 가시성은 바인딩을 통해 제어됩니다. TabItem은 뷰 밖으로 스크롤하지 않습니다. – Donnelle

1

주 TabControl 가시성이 변경 될 때

 
private void Breadcrumb_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
     if ((bool)e.NewValue) 
     { 
      if (sender is TabControl) 
      { 
       TabControl tabControl = (TabControl)sender; 
       int firstVisible = -1; 

       for (int i = 0; i -1) //if is -1, they're all invisible 
        { 

         for (int i = tabControl.Items.Count - 1; i > firstVisible; i--) 
         { 
          TabItem tabItem = (TabItem)tabControl.Items[i]; 
          if (tabItem.Visibility == Visibility.Visible) 
          { 

           tabItem.Style = (Style)FindResource("LastBreadcrumbTabItem"); 
           break; 

          } 
         } 
        } 
       } 
      } 
     } 
관련 문제