113 Stimmen

Gibt es Selected Tab Changed Event in der Standard-WPF-Tab-Steuerelement

Gibt es in WPF ein Ereignis, das verwendet werden kann, um festzustellen, wann ein TabControl der ausgewählten Registerkarte ändert?

Ich habe versucht, mit TabControl.SelectionChanged aber es wird oft ausgelöst, wenn die Auswahl eines Childs innerhalb einer Registerkarte geändert wird.

4voto

Muad'Dib Punkte 27506

Das ist das richtige Ereignis. Vielleicht ist es nicht richtig verdrahtet?

<TabControl SelectionChanged="TabControl_SelectionChanged">
    <TabItem Header="One"/>
    <TabItem Header="2"/>
    <TabItem Header="Three"/>
</TabControl>

in dem Code hinter....

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int i = 34;
}

Wenn ich einen Haltepunkt in der Zeile i = 34 setze, bricht er NUR ab, wenn ich die Registerkarten wechsle, auch wenn die Registerkarten untergeordnete Elemente haben und eine von ihnen ausgewählt ist.

4voto

rolling Punkte 41

Das erzeugte Ereignis blubbert so lange vor sich hin, bis es bearbeitet wird.

Der folgende xaml-Teil löst aus ui_Tab_Changedui_A_Changed wenn das in der Liste ausgewählte Element ListView Änderungen, unabhängig von TabItem Änderung der TabControl .

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

Wir müssen das Ereignis in ui_A_Changed (und ui_B_Changed , und so weiter):

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

2voto

Mc_Topaz Punkte 31

Dieser Code scheint zu funktionieren:

    private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        TabItem selectedTab = e.AddedItems[0] as TabItem;  // Gets selected tab

        if (selectedTab.Name == "Tab1")
        {
            // Do work Tab1
        }
        else if (selectedTab.Name == "Tab2")
        {
            // Do work Tab2
        }
    }

-2voto

Sandun Harshana Punkte 711

Wenn jemand WPF Modern UI verwenden, Sie können nicht OnTabSelected event.but Sie können SelectedSourceChanged Ereignis verwenden.

wie diese

<mui:ModernTab Layout="Tab" SelectedSourceChanged="ModernTab_SelectedSourceChanged" Background="Blue" AllowDrop="True" Name="tabcontroller" >

C#-Code ist

private void ModernTab_SelectedSourceChanged(object sender, SourceEventArgs e)
    {
          var links = ((ModernTab)sender).Links;

          var link = this.tabcontroller.Links.FirstOrDefault(l => l.Source == e.Source);

          if (link != null) {
              var index = this.tabcontroller.Links.IndexOf(link);
              MessageBox.Show(index.ToString());
          }            
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X