WPF SelectedIndex устанавливает выпуск TabControl - PullRequest
2 голосов
/ 16 октября 2011

У меня есть TabControl с двумя элементами.

<TabControl x:Name="tab" SelectionChanged="TabControl_SelectionChanged">
    <TabItem Header="TabItem1">
    <Grid />
</TabItem>
<TabItem Header="TabItem2">
    <Grid />
</TabItem>
</TabControl>

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Debug.WriteLine("Selected Index: " + tab.SelectedIndex);

    if (tab.SelectedIndex == 1)
    {
        tab.SelectedIndex = 0;
    }
}

при нажатии на 2-й элемент, 1-й элемент имеет фокус и печатается ниже.

Selected Index: 1
Selected Index: 0

, но повторите попытку, щелкнув по второму элементу, без вывода! Событие SelectionChanged не запускается.

что не так? Есть ли работа вокруг?

Ответы [ 2 ]

5 голосов
/ 16 октября 2011

Это потому, что вы меняете selectedIndex в событии SelcetedIndexChanged, которое будет вызывать себя синхронно.Вместо этого попробуйте поместить его в диспетчер пользовательского интерфейса в асинхронном режиме, например, так:

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   Debug.WriteLine("Selected Index: " + tab.SelectedIndex);

   if (tab.SelectedIndex == 1)
   {
      Application.Current.Dispatcher.BeginInvoke
          ((Action)delegate { tab.SelectedIndex = 0; }, DispatcherPriority.Render, null);
   }
}

Это даст желаемый результат.

0 голосов
/ 16 октября 2011

Если вы щелкнете по вкладке, которая уже выбрана, изменения выбора уже нет?
То есть событие SelectionChanged не сработает.

Вам нужно подключить обработчик события кСобытие щелчка заголовка элемента TabItem

...