【问题标题】:WPF, C# - change selected tab by doubleclick on a datagrid's rowWPF,C# - 通过双击数据网格的行来更改选定的选项卡
【发布时间】:2016-04-25 05:57:53
【问题描述】:

我有一个位于 tabcontrol 项中的数据网格。 当我双击数据网格中的行时,我希望 tabcontrol 更改选项卡。

这是我的代码:

<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>
...

要更改 tabitem,我使用以下代码:

private void dgAnzeigeWerk_Row_DoubleClick(object sender, MouseButtonEventArgs e)
    {

        tabControl.SelectedItem = tiUebersicht;
    }

但标签不会改变。我尝试使用按钮执行相同的代码并且它有效。 我也尝试过tabControl.SelectedIndex = 2tiUebersicht.IsSelected = true,但没有成功。

有什么建议吗?

【问题讨论】:

  • 请发布您的TabControl 的完整代码以及tiUebersicht 是什么?
  • tiUebersichttabControl 的标签。 TabControl 本身并没有什么特别的

标签: c# wpf datagrid tabcontrol


【解决方案1】:

最后将e.Handled = true; 添加到您的处理程序。

private void dgAnzeigeWerk_Row_DoubleClick(object sender, MouseButtonEventArgs e)
    {
        tabControl.SelectedItem = tiUebersicht;
        e.Handled = true;
    }

实际上选择正在改变,但它发生得非常快,焦点又回到了包含DataGrid 的那个。这可以使用TabControlSelectionChanged 事件来验证。

【讨论】:

  • 谢谢!我错过了 e.Handled = true;这是不工作问题的原因
  • 在我看来,这应该被接受为问题的答案
【解决方案2】:

尝试在事件中使用 Dispatcher

Link to similar question

Dispatcher.InvokeAsync(() => tiUebersicht.IsSelected = true);
Dispatcher.Invoke(() => tiUebersicht.IsSelected = true);
Dispatcher.InvokeAsync(() => tabControl.SelectedItem = tiUebersicht);
Dispatcher.Invoke(() => tabControl.SelectedItem = tiUebersicht);

【讨论】:

  • 为什么我必须在行双击时调用调度程序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多