2010-07-19 19 views
0

J'utilise le contrôle TabNavigation DevComponents pour WPF, et je suis capable d'ajouter un nouvel TabItem à TabNavigation à un index spécifique, appelons-le i, dans le code- derrière. Maintenant, je veux faire le nouveau TabItem SelectedItem, en faisant:WPF DevComponents TabNavigation impossible de modifier SelectedIndex/Item dans code-behind

private void textBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    int i = createNewTabItem(0, "Foo"); 

    TabNavigation tn = (((sender as TextBlock).Parent as Grid).Parent as TabItem).Parent as TabNavigation; 
    tn.SelectedItem = tn.Items[i]; 
} 

private int createNewTabItem(int overflowSrcPageNum, String header) 
{ 
    TabItem ti = new TabItem(); 
    ti.Header = header; 
    tabNavigation.Items.Insert(overflowSrcPageNum + 1, ti); 
    return overflowSrcPageNum + 1; 
} 

Quand je lance ce code, mais, au lieu de la nouvelle TabItem étant mise en vue, il est mis en vue, puis l'onglet d'origine I était activé est rapidement remis en vue.

Si quelqu'un a des idées sur la raison pour laquelle cela se produit, et comment je peux le réparer s'il vous plaît faites le moi savoir. J'ai joint un échantillon du XAML ci-dessous:

<Grid > 
     <Grid.Resources> 
      <ResourceDictionary> 
       <Style TargetType="TextBlock"> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="TextDecorations" Value="Underline"></Setter> 
         </Trigger> 
        </Style.Triggers> 
        <Setter Property="Foreground" Value="White" /> 
        <Setter Property="FontFamily" Value="Segoe UI" /> 
        <Setter Property="FontSize" Value="11" /> 
        <Setter Property="FontWeight" Value="Bold" /> 
        <Setter Property="HorizontalAlignment" Value="Right" /> 
        <Setter Property="Text" Value="View More..." /> 
        <Setter Property="Visibility" Value="Visible" /> 
        <EventSetter Event="MouseLeftButtonDown" Handler="lblMoreCpartys_MouseLeftButtonDown" /> 
       </Style> 
      </ResourceDictionary> 
     </Grid.Resources> 
     <my:TabNavigation Background="Black" HorizontalAlignment="Stretch" Margin="0" Name="tabNavigation" 
         VerticalAlignment="Stretch" MouseLeftButtonDown="tabNavigation_MouseLeftButtonDown" 
         FontSize="12" Foreground="SteelBlue" ForceCursor="True" MouseWheel="tabNavigation_MouseWheel" 
         TabStripPlacement="Bottom"> 
      <TabItem Header="ITEM 1" Name="firstTabItem" FontSize="12" > 
        <TextBlock Name="firstTB" /> 
      </TabItem> 
      <TabItem Header="ITEM 2" Name="secondTabItem" FontSize="12" > 
        <TextBlock Name="secondTB" /> 
      </TabItem> 
     </my:TabNavigation> 
    </grid> 

Merci d'avance.

Répondre

0

Essayez de régler e. Handled à True dans textBlock_MouseLeftButtonDown.

Je ne suis pas familier avec ce contrôle, mais si cela fonctionne comme TabControl, il est logique de mettre un onglet en vue quand il est cliqué. Cette logique voit que l'onglet original a été cliqué, et le remet en vue après votre changement. Le fait de marquer l'objet EventArgs comme étant géré empêchera WPF d'appeler des gestionnaires d'événements sur les éléments parents, ce qui empêchera l'onglet de revenir en arrière.

+0

Merci! Cela a fonctionné parfaitement. –