代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

如何在不发生Click事件的情况下使特定的TabItem获得TabControl的焦点?

  •  15
  • Edward Tanguay  · 技术社区  · 16 年前

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

    伪代码:

    ((TabItem)(MainTabControl.Children[0])).SetFocus();
    
    9 回复  |  直到 11 年前
        1
  •  25
  •   Martin Liversage    16 年前

    这个怎么样?

    MainTabControl.SelectedIndex = 0;
    
        2
  •  7
  •   koopajah MKumar    12 年前
    this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];
    

    我发现命名标签并通过名称访问它通常是一个最佳实践,这样当其他人(或你)添加到标签或子行为标签作为更新的一部分时,你就不必浏览你的代码,找到并修复所有那些“硬编码”的索引。希望这有帮助。

        3
  •  5
  •   Brett Ryan    14 年前

    我知道这是很久以前回答的,但是更好的解决方案是将项目绑定到模型中的集合,并公开所选项目绑定到的属性。

    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 另外,您可以同时使用这两个属性。

    这种方法允许您正确地将模型与用户界面分开,从而可以替换 TabControl 还有其他一些事情,但不要求您更改基础模型。

        4
  •  3
  •   Chris Catignani Sagar Barapatre    11 年前

    查看选项卡控件的属性… 展开选项卡页属性“collection”… 记下你给会员的名字。

    例如,一个名为tabMain的选项卡控件,有两个名为tabHeader和tabDetail的选项卡

    然后选择其中一个选项卡…您必须用选项卡名设置它

    tabMain.SelectedTab = tabHeader;
    
        5
  •  2
  •   Chernikov    16 年前
    tabControl1.SelectedTab = item;
    item.Focus();
    
        6
  •  1
  •   Ray    16 年前

    tabControl.SelectedItem=tabControl.items[0];

        7
  •  1
  •   Webking    16 年前

    如果您有一个名为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>
    

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

    OnClientClick="function(s, e) { SetActiveTab(tabControl, 0);
    
        8
  •  0
  •   V G S Naidu    13 年前

    最好使用以下类型的代码来选择特定的 特定选项卡中的项目…

    .

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

    打电话的时候…tabControl.IsSelected=真; PutfousOnControl(文本框1);

    会很好的…

        9
  •  0
  •   Resmi P R    12 年前

    private子选项卡control1_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