我正在尝试使用以下代码更改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;
}
我错过了什么?
答案 0 :(得分:8)
使用
e.handled = true;
阻止click事件从DataGrid传播到当前TabItem
〜BalamBalam
答案 1 :(得分:0)
您可以验证双击事件是否正在被击中?
我相信DataGrid
标记了其中某些点击事件已处理,因此它们不会传递给其他事件。您可能正在使用其中一个事件。如果是这样,您将不得不切换到处理另一级别的双击事件,例如DataGridCell
上的。