【问题标题】:Changing TabControl SelectedIndex when adding a new TabItem添加新 TabItem 时更改 TabControl SelectedIndex
【发布时间】:2020-04-05 15:47:04
【问题描述】:

我制作了一个按钮来在我的 TabControl 中添加一个新的 TabItem。它工作得很好,但是当我添加一个新的 TabItem 时,我希望 SelectedIndex 位于新的 TabItem 上。

的代码
private void AddNewTabItem(object sender, MouseButtonEventArgs e)
    {
        ...
        tabControl.Items.Add(tabItem);
        tabControl.SelectedIndex = tabControl.Items.Count - 1;
    }

但这不起作用,因为新的 TabItem 是在执行了与我的按钮单击链接的所有函数之后创建的。因此,当我更改 SelectedIndex 时,尚未创建新的 TabItem。

我在 TabControl 类上搜索了一个 triggerEvent,例如“WhenItemsChange”,但我什么也没找到。

感谢您的帮助,如果不清楚,请见谅。

【问题讨论】:

  • 您可以尝试使用OnItemsChanged方法,并将IsSelected设置为新添加的标签项
  • 我不知道这个方法,你能更精确一点吗?
  • tabControlMainWindow.tc 是否引用相同的 TabControl? tabControl.SelectedItem = ti;呢?
  • 是的,它指的是同一个 TabControl,我进行了编辑,所以它更清晰。 tabControl.SelectedItem = ti 也不起作用。因为和之前一样的问题,TabItem 直到函数结束才完全创建。
  • 例如,我尝试在button.MouseLeftButtonUp 中添加MainWindow.tc.SelectedItem = ti; 而不是button.MouseLeftButtonDown,并且成功了。但这不是我想要的。

标签: c# wpf tabitem


【解决方案1】:

您可以创建默认选中的 TabItems。

如果ti已经是一个TabItem,就写

ti.IsSelected = true;
tabControl.Items.Add(ti);

如果没有,请为 TabControl 的ItemContainerStyle 分配适当的样式:

<TabControl x:Name="tabControl">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="IsSelected" Value="True"/>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>

【讨论】:

  • 如何从后面的代码中做到这一点?我认为向 ItemsChanged 添加事件处理程序更容易
  • 如果ti已经是一个TabItem,那就更简单了。查看编辑。
  • 不行,还有设置IsSelected属性时ti没有完全创建的问题
  • 你忘了告诉ti到底是什么,是不是TabItem?
  • 是的,它是一个tabItem
【解决方案2】:

试试这个:

private void AddNewTabItem(object sender, MouseButtonEventArgs e)
{
    ...
    tabControl.Items.Add(ti);
    Dispatcher?.BeginInvoke((Action)(
            () => tabControl.SelectedIndex = tabControl.Items.Count - 1));
}

【讨论】:

  • 这只是巧合,因为即使在延迟执行之后,项目容器的生成也可能无法完成。
猜你喜欢
  • 1970-01-01
  • 2012-11-17
  • 2018-03-23
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多