2014-10-14 9 views
0

내부에 TabControl과 3 개의 TabItem을 만들었습니다. 내 코드는 다음과 같습니다SelectionChanged에서 WPF의 TabControl과 이상한 동작

XAML (코드 숨김)

<TabControl Name="ConfigTabs" HorizontalAlignment="Left" VerticalAlignment="Top" SelectionChanged="TabControlSelectionChanged"> 
    <TabItem Header="Allgemeines"> 
    ... 
    </TabItem> 
    <TabItem Header="Monitorbelegung"> 
    ... 
    </TabItem> 
    <TabItem Header="Produkt-Konfigurationen"> 
    ... 
    </TabItem> 
</TabControl> 

C 번호 : 나는 TabItem의를 변경할 때 의도 한대로

private void TabControlSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (e.Source is TabControl && this.IsLoaded) 
    { 
    TabControl MyTabControl = (TabControl)sender; 
    if (MyTabControl.SelectedIndex == 0) 
    { 
     MessageBox.Show("Allgemeines"); 
    } 
    else if (MyTabControl.SelectedIndex == 1) 
    { 
     MessageBox.Show("Monitor"); 
    } 
    else if (MyTabControl.SelectedIndex == 2) 
    { 
     MessageBox.Show("Configs"); 
    } 
    } 
} 

는 텍스트와 메시지 박스가 팝업됩니다. 그러나 이제 다른 항목을 클릭하면 다음 항목의 MessageBox를 가져온 후 이후의 MessageBox를 가져옵니다. 내가 그 뒤에있는 논리를 완벽하게 확신하지 못하는 곳. MessageBox를 모두 삭제해도 문제가 없지만 나중에 구현할 논리로 인해 필요합니다.

이제 질문은 "어떻게 이벤트를 두 번 발사 할 수 있습니까?";

+0

당신이하는 뭔가를 시도 않았다

XAML :

<TabControl Name="ConfigTabs" HorizontalAlignment="Left" VerticalAlignment="Top"> <TabControl.Resources> <Style TargetType="TabItem"> <EventSetter Event="Selector.Selected" Handler="OnNewTabSelected"/> </Style> </TabControl.Resources> <TabItem Header="Allgemeines"> ... </TabItem> <TabItem Header="Monitorbelegung"> ... </TabItem> <TabItem Header="Produkt-Konfigurationen"> ... </TabItem> </TabControl> 

C 번호 (코드 숨김) 당신이 스타일을 사용하면 TabItems의 변화 이벤트를 잡을 수 있습니다 'MessageBox.Show (...)'대신'Debug.WriteLine (...)'과 같은 탭을 전환하는 과정을 방해하지 않습니까? – dkozl

+0

네 - 그 일을 처리 할 수는 있지만 이벤트 처리기에서는 MessageBox.Show 만 사용해야합니다. 이것은 TabControl의 버그처럼 들립니다. 나는 당신이) 그것을보고해야하고 b) 당신의 재료를 다른 방법으로 할 것이라고 생각합니다. (어째서 MVVM을 사용하지 않는 이유는 무엇입니까?) –

+0

MVVM을 사용하는 방법을 알지 못하기 때문에 프로젝트를 마칠 때까지 몇 주 밖에 남지 않았으므로 큰 것을 배울 시간이 없습니다. –

답변

0

좋아, 찾았습니다. MessageBox는 change-event를 인터럽트하므로 다른 방법으로 사용해야합니다.

private void OnNewTabSelected(object sender, RoutedEventArgs e) 
    { 
     if (e.Source is TabItem && this.IsLoaded) 
     { 
      TabItem MyTab = (TabItem)sender; 
      TabControl MyControl = (TabControl)MyTab.Parent; 
      if (MyControl.SelectedIndex == 0) 
      { 
       MessageBox.Show("Beep" + MyControl.SelectedIndex); 
      } 
      else if (MyControl.SelectedIndex == 1) 
      { 
       MessageBox.Show("Beep" + MyControl.SelectedIndex); 
      } 
      else if (MyControl.SelectedIndex == 2) 
      { 
       MessageBox.Show("Beep" + MyControl.SelectedIndex); 
      } 
     } 
    }