2012-06-13 3 views
3

Я работаю над WPF, и я создаю userControl, который содержит TabControl с несколькими TabItems.Вывод события SelectionChanged TabControl

Мне нужно выполнить некоторые действия, когда выбранная вкладка изменится, поэтому я попытался использовать событие myTabControl.SelectionChanged, но он был поднят много раз, хотя я только что нажал TabItem. Потом я прочитал этот пост is-there-selected-tab-changed-event-in-the-standard-wpf-tab-control и поместить этот код в моем методе:

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

После этого, что первая проблема была решена, но потом, когда я запустил приложение и попытался изменить вкладки, была сгенерирована ошибка:

Dispatcher processing has been suspended, but messages are still being processed 

Визуальные точки Студийные к первой строке кода внутри if (e.Source is TabControl) { //here }

Но я нашел эту статью selectionchanged-event-firing-exceptions-for-unknown-reasons и я мог бы решить эту проблему писать код, как показано ниже:

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

Но сейчас я с другой проблемой, которую я гавань была в состоянии решить:

Событие дважды стреляет! И еще одна странность в том, что только в первый раз, когда я пытаюсь изменить выбранную вкладку, событие увеличивается дважды, но выбранная вкладка остается неизменной.

Я надеюсь, что кто-то может мне помочь, спасибо заранее.

ответ

4

Я думаю, что нужно отдыхать, так как моя проблема действительно глупо:.

Оказывается, что вместо TabControl я должен использовать TabItem, поскольку это контроль я интересен

Так мой код должен быть, как показано ниже:

void mainTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.Source is TabItem) 
     {  
      if (this.IsLoaded) 
      { 
       //do work when tab is changed 
      } 
     } 
    } 
+1

Я должен был использовать TabControl, но помогло спасибо – Brent

+0

так я Брент, сохраняемые my_Ass, спасибо – TripleAntigen

Смежные вопросы