Не удается переключить TabItem из события DoubleClick - PullRequest
3 голосов
/ 31 августа 2011

Я пытаюсь изменить выбранную вкладку моего TabControl, используя следующий код:

// Switch to configuration tab
tabControl.SelectedItem = configTab;

Хотя он работает очень хорошо из обработчика ButtonClick, он ничего не делает из обработчика DataGrid DoubleClick в том же TabItem. Я установил отладчик на эту строку и вижу изменение свойства SelectedItem, но вкладка отказывается изменить.

РЕДАКТИРОВАТЬ: Подробнее код

Элемент управления вкладки определяется так:

<Grid>
    <TabControl Height="Auto" HorizontalAlignment="Stretch" Name="tabControl" VerticalAlignment="Stretch" Width="Auto" Padding="0" SelectionChanged="BuildSummary">
        <TabItem Header="Configurations" Name="configTab">
            ...
        </TabItem>
        <TabItem Header="Temperature" Name="tempTab">
            ...
        </TabItem>
        <TabItem Header="Test List" Name="testTab">
            ...
        </TabItem>
        <TabItem Header="Summary" Name="summaryTab">
            ...
        </TabItem>
    </TabControl>
</Grid>

Это рабочее событие:

private void Execute(object sender, RoutedEventArgs e)
{
    // Switch to configuration tab
    tabControl.SelectedItem = configTab;
}

Это прерванное событие:

private void DoubleClick(object sender, MouseButtonEventArgs e)
{
    DataGridRow row = ItemsControl.ContainerFromElement(
        (DataGrid)sender, e.OriginalSource as DependencyObject) 
        as DataGridRow;

    if (row == null)
        return;

    /* code here prepares the configuration tab */
    ...

    // Switch to configuration tab
    tabControl.SelectedItem = configTab;
}

Что мне не хватает?

Ответы [ 2 ]

8 голосов
/ 01 сентября 2011

Используйте

e.handled = true;

, чтобы остановить распространение события click из DataGrid в текущий TabItem

~ BalamBalam

0 голосов
/ 31 августа 2011

Можете ли вы проверить, что ваше событие Double-Click вообще срабатывает?

Я считаю, что DataGrid помечает некоторые из его событий щелчка как обработанные, поэтому они не передаются другим событиям. Возможно, вы используете одно из этих событий. Если это так, вам придется переключиться на обработку события двойного щелчка на другом уровне, например на DataGridCell.

...