无法从DoubleClick事件切换TabItem

时间:2011-08-31 16:29:29

标签: c# wpf tabcontrol

我正在尝试使用以下代码更改TabControl的选定选项卡:

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

虽然它可以在ButtonClick处理程序中正常工作,但它在同一个TabItem上的DataGrid DoubleClick处理程序中不执行任何操作。我已将调试器设置为此行,并且可以看到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 个答案:

答案 0 :(得分:8)

使用

e.handled = true;

阻止click事件从DataGrid传播到当前TabItem

〜BalamBalam

答案 1 :(得分:0)

您可以验证双击事件是否正在被击中?

我相信DataGrid标记了其中某些点击事件已处理,因此它们不会传递给其他事件。您可能正在使用其中一个事件。如果是这样,您将不得不切换到处理另一级别的双击事件,例如DataGridCell上的。