2008-10-15 17 views
5

Tôi muốn đặt kiểu trên TabItem đầu tiên và cuối cùng trong TabControl và cập nhật chúng khi khả năng hiển thị của TabItems bị thay đổi. Tôi không thể nhìn thấy một cách để làm như vậy với gây nên.Đặt kiểu trên TabItem đầu tiên và cuối cùng có thể thấy TabItem của TabControl

gì chúng tôi sau trông như sau:

| > > > |

Và tầm nhìn của TabItems được xác định bằng cách liên kết.

Tôi có mã hoạt động trong mã. Trên chế độ hiển thị TabItem đã thay đổi, liệt kê thông qua TabItems cho đến khi bạn tìm thấy cái nhìn thấy đầu tiên. Đặt phong cách trên đó. Đối với tất cả các TabItem có thể nhìn thấy khác, đặt chúng thành kiểu nhọn (để cái đầu tiên có thể thấy trước đó bây giờ là nhọn). Sau đó, bắt đầu từ cuối cho đến khi bạn tìm thấy một TabItem có thể nhìn thấy và thiết lập phong cách cuối cùng trên đó. (Điều này cũng cho phép chúng tôi giải quyết vấn đề với TabControl, nơi nó sẽ hiển thị nội dung của một TabItem không nhìn thấy được nếu không có TabItem nào có thể nhìn thấy được chọn.)

Có những cải tiến đáng kể mà tôi có thể thực hiện theo phương pháp của mình, nhưng tôi không tin rằng đó là cách tiếp cận đúng.

Bạn sẽ tiếp cận điều này bằng cách nào?

+0

Không nhìn thấy giải pháp trực tiếp, tôi có thể nghĩ đến việc tạo TabControl tùy chỉnh. Nhưng một lần nữa khả năng hiển thị phụ thuộc vào loại Panel đặt ra các tabitems, Hãy cho chúng tôi biết thêm chi tiết nếu bạn có. –

+0

Chúng tôi đang sử dụng WrapPanel. Để cung cấp cho bạn ý tưởng tốt hơn, tiêu đề là các mũi tên chồng chéo và bắt đầu và kết thúc cần phải là hình vuông. Tôi có nó làm việc trong mã bằng cách áp dụng phong cách trên khả năng hiển thị TabItem thay đổi, nhưng tôi tò mò muốn xem những gì người khác nghĩ. – Donnelle

Trả lời

1

Xin lỗi bạn có thể giải thích điều này tốt hơn một chút cho đến nay tôi đã giải thích câu hỏi của bạn như vậy:

Áp dụng một phong cách cụ thể khi những thay đổi tầm nhìn vào các mục tab ở đầu và cuối của sự kiểm soát tab - tức là nếu nó cuộn ra khỏi tầm nhìn sau đó thay đổi phong cách?

Nếu đây là như vậy thì, khi bạn thêm TabItems của bạn (hoặc lập trình hoặc trong WPF), bạn sẽ cần phải thực hiện các xử lý sự kiện IsVisibleChanged trên TabItems bạn muốn xử lý (tức là đầu tiên và cuối cùng hay tất cả?)

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; 
    } 

Đây là đơn giản nếu bạn lập trình thêm các mục tab để kiểm soát của bạn ... :)

+2

Là một hình ảnh tinh thần, mỗi TabItem là một hình dạng mũi tên | >>> | nhưng những cái đầu tiên và cuối cùng có đầu vuông. Nếu TabItem 0 không hiển thị, thì TabItem 1 phải có kiểu hình vuông. Khả năng hiển thị của TabItems được kiểm soát thông qua ràng buộc. TabItems sẽ không cuộn ra khỏi chế độ xem. – Donnelle

1

Lưu ý rằng tầm nhìn của TabItems của chúng tôi sẽ không bị ảnh hưởng trong khi TabControl đó là theo quan điểm, vì vậy chúng ta có thể áp dụng phong cách chỉ khi khả năng hiển thị TabControl thay đổi.

 
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; 

          } 
         } 
        } 
       } 
      } 
     }