2008-10-15 13 views
5

Quiero establecer un estilo en el primer y el último TabItems en un TabControl, y tenerlos actualizados a medida que se cambia la visibilidad de los TabItems. No veo una manera de hacerlo con los desencadenantes.Estilo de configuración en el primer y último tabItem visible de TabControl

lo que buscamos es similar al siguiente:

| > > > |

Y la visibilidad de TabItems se determinan mediante la unión.

Lo tengo trabajando en código. En la visibilidad de TabItem modificada, enumere a través de TabItems hasta que encuentre el primero visible. Establece el estilo en ese. Para todos los demás TabItems visibles, configúrelos con el estilo puntiagudo (de modo que el primero visible sea ahora puntiagudo). Luego comience desde el final hasta que encuentre un TabItem visible y establezca el último estilo en ese. (Esto también nos permite abordar un problema con TabControl donde mostrará el contenido de un TabItem no visible si no se selecciona ninguno de los TabItems visibles.)

Sin duda hay mejoras que podría hacer en mi método, pero estoy no está convencido de que ES el enfoque correcto.

¿Cómo te acercarías a esto?

+0

Al no ver una solución directa, puedo pensar en la construcción de un TabControl personalizado. Pero, de nuevo, la visibilidad depende del tipo de Panel que expone las pestañas, denos más detalles si tiene. –

+0

Estamos usando un WrapPanel. Para darle una mejor idea, los encabezados se superponen con flechas, y el inicio y el final deben ser cuadrados. Lo tengo trabajando en código aplicando estilos en la visibilidad de TabItem cambiado, pero tengo curiosidad por ver lo que otros piensan. – Donnelle

Respuesta

1

En este momento se puede explicar esto un poco mejor hasta ahora he interpretado su pregunta como tan:

aplicar un estilo específico cuando los cambios de visibilidad en los elementos de la ficha al principio y al final de la tarjeta de registro - es decir, si se desplaza fuera de la vista y luego cambia el estilo?

Si esto es así, entonces, a medida que añada sus TabItems (mediante programación o en WPF) que tendrá que implementar el controlador de eventos IsVisibleChanged en los TabItems que desea manejar (es decir, primero y último o todos?)

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

Esto es simple si se agrega mediante programación los elementos de la ficha a su mando ... :)

+2

Como imagen mental, cada TabItem tiene forma de flecha | >>> | pero el primero y el último tienen extremos cuadrados. Si TabItem 0 no es visible, entonces TabItem 1 debe tener el estilo cuadrado. La visibilidad de TabItems se controla mediante el enlace. Los TabItems no se desplazarán fuera de la vista. – Donnelle

1

Tenga en cuenta que la visibilidad de nuestros TabItems no se verá afectada, mientras que TabControl está a la vista, por lo que podemos aplicar estilos solamente cuando la visibilidad de TabControl cambia

 
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; 

          } 
         } 
        } 
       } 
      } 
     } 
Cuestiones relacionadas