我有一个位于选项卡控件项中的数据网格。当我双击数据网格中的行时,我希望选项卡控件更改选项卡。
这是我的代码:
<TabItem
x:Name="tiDashboard"
Header="Dashboard"
Background="White">
<Grid>
<DataGrid
IsReadOnly="True"
x:Name="dgAnzeigeWerk"
AutoGenerateColumns="false"
Margin="0,10,0,249"
HeadersVisibility="Column"
RowHeight="25" HorizontalAlignment="Left" Width="492">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="Control.MouseDoubleClick" Handler="dgAnzeigeWerk_Row_DoubleClick"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Width="auto" Header="Nummer" Binding="{Binding Kostenstellennummer}"/>
<DataGridTextColumn Width="auto" Header="Kostenstelle" Binding="{Binding Kostenstelle}"/>
<DataGridTextColumn Width="*" Header="Kosten" Binding="{Binding Kosten}"/>
</DataGrid.Columns>
</DataGrid>
<ComboBox x:Name="cbYearWerk" HorizontalAlignment="Left" Height="25" Margin="497,10,0,0" VerticalAlignment="Top" Width="98" VerticalContentAlignment="Center" SelectionChanged="cbYearWerk_SelectionChanged"/>
<Separator Height="15" Margin="0,-10,0,0" VerticalAlignment="Top"/>
</Grid>
</Grid>
</TabItem>
...
要更改选项卡项,我使用此代码:
private void dgAnzeigeWerk_Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
tabControl.SelectedItem = tiUebersicht;
}
但选项卡不会更改。我尝试用按钮做同样的代码,它奏效了。我也尝试了tabControl.SelectedIndex = 2
或tiUebersicht.IsSelected = true
但没有成功。
有什么建议吗?
最后将
e.Handled = true;
添加到处理程序中。
private void dgAnzeigeWerk_Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
tabControl.SelectedItem = tiUebersicht;
e.Handled = true;
}
实际上选择正在发生变化,但它发生得非常快,焦点正在返回到包含DataGrid
的那个。这可以使用TabControl
事件SelectionChanged
进行验证。
尝试在事件中使用调度程序。
链接到类似问题
Dispatcher.InvokeAsync(() => tiUebersicht.IsSelected = true);
Dispatcher.Invoke(() => tiUebersicht.IsSelected = true);
Dispatcher.InvokeAsync(() => tabControl.SelectedItem = tiUebersicht);
Dispatcher.Invoke(() => tabControl.SelectedItem = tiUebersicht);