如何在没有单击事件的情况下使TabContem专注于TabControl?

Edw*_*uay 16 c# wpf xaml tabcontrol focus

如何告诉我的TabControl将焦点设置为其第一个TabItem,如下所示:

伪代码:

((TabItem)(MainTabControl.Children[0])).SetFocus();
Run Code Online (Sandbox Code Playgroud)

Mar*_*age 26

这个怎么样?

MainTabControl.SelectedIndex = 0;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案没有设定焦点,只是选择。 (2认同)

小智 8

this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];
Run Code Online (Sandbox Code Playgroud)

我发现通常最好的做法是命名您的标签并通过名称访问它,以便在其他人(或您)添加或替换选项卡作为更新的一部分时,您不必通过您的代码并找到并修复所有那些"硬编码"索引.希望这可以帮助.

  • 这个答案适用于 WinForms,而不是 OP 在其标签中指定的 WPF。 (2认同)

Bre*_*yan 5

我意识到很久以前就已经回答了这个问题,但是更好的解决方案是将项目绑定到模型中的集合并公开选定项目绑定的属性.

XAML:

<!-- MyTemplateForItem represents your template -->
<TabControl ItemsSource="{Binding MyCollectionOfItems}"
            SelectedItem="{Binding SelectedItem}"
            ContentTemplate="{StaticResource MyTemplateForItem}">
</TabControl>
Run Code Online (Sandbox Code Playgroud)

代码背后:

public ObservableCollection<MyItem> MyCollectionOfItems {
    get;
    private set;
}

private MyItem selectedItem;
public MyItem SelectedItem{
    get { return selectedItem; }
    set {
        if (!Object.Equals(selectedItem, value)) {
            selectedItem = value;
            // Ensure you implement System.ComponentModel.INotifyPropertyChanged
            OnNotifyPropertyChanged("SelectedItem");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您需要做的就是设置项目:

MyItem = someItemToSelect;
Run Code Online (Sandbox Code Playgroud)

您可以在SelectedIndex属性中使用相同的逻辑,此外,您可以同时使用这两个逻辑.

这种方法允许您正确地将模型与UI分离,这可以允许您替换TabControl其他内容,但不要求您更改基础模型.