119 votes

Est-il Sélectionné l'Onglet Événement de modification de la norme WPF Contrôle Onglet

Dans WPF, est-il un événement qui peut être utilisé pour déterminer quand une TabControls'onglet sélectionné changements?

J'ai essayé à l'aide d' TabControl.SelectionChanged mais c'est me faire virer plusieurs fois, quand un enfant est la sélection à l'intérieur d'un onglet est modifiée.

148voto

Jon Kragh Points 1264

J'ai attaché présent dans le gestionnaire pour le faire fonctionner:

void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.Source is TabControl)
    {
      //do work when tab is changed
    }
}

97voto

unexpectedkas Points 341

Si vous définissez l' x:Name bien TabItem comme:

<TabControl x:Name="MyTab" SelectionChanged="TabControl_SelectionChanged">
    <TabItem x:Name="MyTabItem1" Header="One"/>
    <TabItem x:Name="MyTabItem2" Header="2"/>
    <TabItem x:Name="MyTabItem3" Header="Three"/>
</TabControl>

Ensuite, vous pouvez accéder à chaque TabItem lors de l'événement:

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (MyTabItem1.IsSelected)
    // do your stuff
    if (MyTabItem2.IsSelected)
    // do your stuff
    if (MyTabItem3.IsSelected)
    // do your stuff
}

63voto

MicBig Points 1

Si vous voulez juste avoir un événement lorsqu'un onglet est sélectionné, c'est la façon correcte:

<TabControl>
    <TabItem Selector.Selected="OnTabSelected" />
    <TabItem Selector.Selected="OnTabSelected" />
    <TabItem Selector.Selected="OnTabSelected" />
    <!-- You can also catch the unselected event -->
    <TabItem Selector.Unselected="OnTabUnSelected" />
</TabControl>

Et dans votre code

    private void OnTabSelected(object sender, RoutedEventArgs e)
    {
        var tab = sender as TabItem;
        if (tab != null)
        {
            // this tab is selected!
        }
    }

15voto

Nidonocu Points 3580

Vous pouvez toujours utiliser cet événement. Il suffit de vérifier que l'expéditeur argument est le contrôle que vous avez fait et dans ce cas, exécutez le code d'événement.

4voto

rolling Points 31

L'événement a généré des bouillonne jusqu'à ce qu'il est manipulé.

Ce xaml partie ci-dessous déclenche ui_Tab_Changed après ui_A_Changed lorsque l'élément sélectionné dans l' ListView change, qu' TabItem variation en TabControl.

<TabControl SelectionChanged="ui_Tab_Changed">
  <TabItem>
    <ListView SelectionChanged="ui_A_Changed" />
  </TabItem>
  <TabItem>
    <ListView SelectionChanged="ui_B_Changed" />
  </TabItem>
</TabControl>

Nous avons besoin de consommer de l'événement en ui_A_Changed (et ui_B_Changed, et ainsi de suite):

private void ui_A_Changed(object sender, SelectionChangedEventArgs e) {
  // do what you need to do
  ...
  // then consume the event
  e.Handled = true;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X