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

时间:2009-08-04 12:11:16

标签: c# wpf xaml focus tabcontrol

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

伪码:

((TabItem)(MainTabControl.Children[0])).SetFocus();

10 个答案:

答案 0 :(得分:25)

这个怎么样?

MainTabControl.SelectedIndex = 0;

答案 1 :(得分:8)

this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];

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

答案 2 :(得分:5)

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

XAML:

<!-- MyTemplateForItem represents your template -->
<TabControl ItemsSource="{Binding MyCollectionOfItems}"
            SelectedItem="{Binding SelectedItem}"
            ContentTemplate="{StaticResource MyTemplateForItem}">
</TabControl>

代码背后:

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");
        }
    }
}

现在,您只需设置项目即可:

MyItem = someItemToSelect;

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

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

答案 3 :(得分:3)

查看选项卡控件的属性... 展开TabPages属性“集合”... 记下你给会员的名字。

即。一个名为tabMain的选项卡控件,带有2个选项卡,名为tabHeader和tabDetail

然后选择任一标签...您必须使用标签名

进行设置
tabMain.SelectedTab = tabHeader;

答案 4 :(得分:2)

tabControl1.SelectedTab = item;
item.Focus();

答案 5 :(得分:1)

tabControl.SelectedItem = tabControl.Items [0];

答案 6 :(得分:1)

如果您有一个名为tabControl的Tabcontroller,您可以使用不同的方法设置selectedIndex,我主要使用以下方法。

代码隐藏:

tabControl.SelectedIndex = 0; // Sets the focus to first tabpanel

客户机侧:

首先,将以下javascript放在aspx / ascx文件中:

<script type="text/javascript">
function SetActiveTab(tabControl, activeTabIndex) {
    var activeTab = tabControl.GetTab(activeTabIndex);
    if(activeTab != null)
        tabControl.SetActiveTab(activeTab);
}</script>

然后将以下clientide事件添加到首选控制器:

OnClientClick="function(s, e) { SetActiveTab(tabControl, 0);

答案 7 :(得分:0)

  

最好使用以下类型的代码来选择特定代码   特定标签中的项目......

 private void PutFocusOnControl(Control element)
        {
            if (element != null)
                Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input,
                    (System.Threading.ThreadStart)delegate
                    {
                        element.Focus();
                    });
        }
  

在呼唤时间...... tabcontrol.isselected = true;   PutFocusOnControl(TextBox1中);

     

会很好......

答案 8 :(得分:0)

Private Sub TabControl1_SelectedIndexChanged(sender as Object,e As EventArgs)处理TabControl1.SelectedIndexChanged         “MSGBOX(TabControl1.SelectedIndex)

    If TabControl1.SelectedIndex = 0 Then
        txt_apclntFrstName.Select()
    Else
        txtApplcnNo.Select()
    End If


End Sub

答案 9 :(得分:0)

基本上,这里的所有答案都与 SELECTION 有关,该答案不能回答问题。
也许这就是OP想要的,但是这个问题非常具体地要求提供 FOCUS

TabItem item = (TabItem)MainTabControl.Items[0];
// OR
TabItem item = (TabItem)MainTabControl.SelectedItem;
// Then
item.Focus();