2009-07-02 13 views
10

Tengo un WPF TabControl que tiene un par de botones en el encabezado TabItem. Quiero que la pestaña seleccionada cambie cuando se hace clic en un botón con encabezado. Aquí es un fragmento de código:Cómo cambiar la pestaña seleccionada en el botón hacer clic en WPF TabControl con botones en el encabezado

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <TabControl> 
     <TabItem Content="Item 1 Content"> 
      <TabItem.Header> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock FontSize="14" FontWeight="Bold" Text="Item1"/> 
        <StackPanel Orientation="Horizontal"> 
        <Button Content="Action 1"/> 
        <Button Content="Action 2"/> 
        </StackPanel> 
       </StackPanel> 
      </TabItem.Header> 
     </TabItem> 
     <TabItem Content="Item 2 Content"> 
      <TabItem.Header> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock FontSize="14" FontWeight="Bold" Text="Item2"/> 
        <StackPanel Orientation="Horizontal"> 
        <Button Content="Action 1"/> 
        <Button Content="Action 2"/> 
        </StackPanel> 
       </StackPanel> 
      </TabItem.Header> 
     </TabItem> 
     </TabControl> 
    </Grid> 
</Page> 

Este espectáculo muestra un par de Tab s. Se selecciona una pestaña si se hace clic en el fondo del encabezado; sin embargo, si se hace clic en un botón, la pestaña no se selecciona. Quiero que el botón acepte el clic, pero también quiero que se seleccione la pestaña correspondiente al botón. ¿Alguien puede ayudar?

Gracias, Hitesh

Respuesta

10

Podemos hacer esto mediante el uso de Event Routing. RoutedEvents, como Click, aumentará el árbol de elementos, hasta que algo maneje el evento. Debido a esto, en realidad ya está recibiendo el evento Click en los elementos de pestaña, aún no estamos haciendo nada con eso. Podríamos crear un evento para manejar el botón Haga clic en los elementos de la ficha como esta:

<TabItem Content="Item 1 Content" ButtonBase.Click="TabItem_Click"> 

Sin embargo, tendríamos que establecer que en cada ficha, así que en vez podemos crear un estilo para los TabItems en el TabControl así:

<TabControl> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="{x:Type TabItem}"> 
      <EventSetter Event="ButtonBase.Click" 
         Handler="TabItem_Click" /> 
     </Style> 
    </TabControl.ItemContainerStyle> 
.... 
</TabControl> 

Ahora, en nuestro gestor de eventos podemos seleccionar la pestaña que se ha hecho clic:

private void TabItem_Click(object sender, RoutedEventArgs e) 
{ 
    Trace.WriteLine("TabItemClicked"); 
    ((TabItem)sender).IsSelected = true; 
    e.Handled = true; 
} 
+0

Gracias. Esto ha ayudado. – HiteshP

5

que estaba haciendo un poco de RnD en el problema anterior ri Ahora puede lograr lo anterior de una manera diferente, pero aún así sería genial si pudiera ayudarme en la forma en que lo ejecutó.

En el caso SelectionChanged del cuadro de lista que acaba de cambiar el SelectedItem del control de ficha a la que yo quiero decir

  Tbctrl.SelectedItem = (TabItem)Tbctrl.FindName("item2"); 

Aquí Tbctrl es el nombre de la tabcontrol y elemento2 es el nombre de la TabItem en el tabcontrol que contiene los cuadros de texto mencionados anteriormente.

Saludos,

Dhaval

Cuestiones relacionadas