2008-10-15 20 views
5

'un ilk ve son görünür TabItem stilini ayarlama TabControl içindeki ilk ve son TabItems'de bir stil ayarlamak ve bunları TabItems'in görünürlüğü olarak değiştirilmesini sağlamak istiyorum. Tetikleyicilerle bunu yapmanın bir yolunu göremiyorum.TarControl

| > > > |

Ve TabItems görünürlüğü bağlayıcı belirlenir: Ne böyle görünüyor peşindeler

.

Kodda çalışıyorum. TabItem görünürlüğü değiştiğinde, ilk görünür olanı bulana kadar TabItems içinde numaralandırın. Tarzdaki stili ayarla. Diğer tüm görünür TabItems'ler için, bunları sivri stile ayarlayın (böylece daha önce ilk görünür olanın artık sivri olması). Sonra görünür bir TabItem buluncaya ve son stilini bulana kadar sondan başlayın. (Bu, görünür TabItems'in hiçbiri seçili değilse, görünmez bir TabItem içeriğinin görüntüleneceği TabControl ile ilgili bir sorunu ele almamıza da olanak tanır.)

Metodumda yapabileceğim hiç şüphesiz geliştirmeler var. Doğru yaklaşım olduğuna inanmadım.

Buna nasıl yaklaşırsınız? Şu ana kadar iyi bu biraz açıklayabilir

+0

doğrudan bir çözüm görerek değil, ben özel bir TabControl bina düşünebilir. Fakat yine de görünürlük, tabloların nasıl yapıldığına bağlıdır. Eğer varsa, bize daha fazla ayrıntı verin. –

+0

Bir WrapPanel kullanıyoruz. Daha iyi bir fikir vermek için, başlıklar üst üste binen oklardır ve başlangıç ​​ve bitişin kare olması gerekir. TabItem görünürlüğü üzerinde stiller uygulayarak kodda çalışıyorum ama başkalarının ne düşündüğünü merak ediyorum. – Donnelle

cevap

1

Maalesef ben böylece sorunuzu yorumladılar:

belirli stilini uygulama sekme denetiminin başında ve sonunda sekme öğeler üzerinde görünürlük değişiklikleri zaman - eğer yani Görünüm dışında kayar sonra stilini değiştirir?

bu sizin TabItems (program aracılığıyla veya wpf) Eğer işlemek isteyen TabItems üzerinde IsVisibleChanged olay işleyicisi uygulamak gerekir (yani ilk ve son veya tüm?) Olacaktır

ekleyin, sonra Öyleyse o SekmeDenetimi görünümünde iken bizim TabItems görünürlüğü etkilenmeyecektir, bu nedenle ancak stilleri uygulayabilirsiniz
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; 
    } 

programlı şekilde denetime sekme öğeler eklemek, bu basit ... :)

+2

Zihinsel bir görüntü olarak, her TabItem bir ok şeklidir | >>> | ama ilk ve sonuncular kare uçları var. TabItem 0 görünür olmazsa, TabItem 1'in kare stili olması gerekir. TabItems'in görünürlüğü bağlanma yoluyla kontrol edilir. TabItems görünüm dışı kayar. – Donnelle

1

Not TabControl görünürlüğü değiştiğinde.

 
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; 

          } 
         } 
        } 
       } 
      } 
     }