Как сделать так, чтобы конкретный TabItem фокусировался на TabControl без события click? - PullRequest
16 голосов
/ 04 августа 2009

Как мне сказать моему TabControl установить фокус на его первый TabItem, примерно так:

псевдокод:

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

Ответы [ 9 ]

25 голосов
/ 04 августа 2009

Как насчет этого?

MainTabControl.SelectedIndex = 0;
8 голосов
/ 20 февраля 2013
this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];

Я обнаружил, что обычно лучше называть свои вкладки и получать к ним доступ через имя, чтобы, если / когда другие люди (или вы) добавляли или закрывали вкладки как часть обновления, вам не нужно было идти через ваш код и найдите и исправьте все эти «жестко закодированные» индексы. надеюсь, это поможет.

5 голосов
/ 23 июня 2011

Я понимаю, что на это уже давно ответили, однако лучшим решением было бы связать ваши элементы с коллекцией в вашей модели и показать свойство, с которым связан выбранный элемент.

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 чем-то другим, но не требует изменения базовой модели.

3 голосов
/ 16 июля 2014

Посмотрите на свойства для вкладки ... Разверните свойства TabPages "коллекция" ... Запишите имена, которые вы дали членам.

т. элемент управления tab с именем tabMain с 2 вкладками с именами tabHeader и tabDetail

Затем, чтобы выбрать любую вкладку ... Вы должны установить ее с именем вкладки

tabMain.SelectedTab = tabHeader;
2 голосов
/ 04 августа 2009
tabControl1.SelectedTab = item;
item.Focus();
1 голос
/ 04 августа 2009

Если у вас есть Tabcontroller с именем tabControl, вы можете установить 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);
1 голос
/ 04 августа 2009

tabControl.SelectedItem = tabControl.Items [0];

0 голосов
/ 26 марта 2013

Private Sub TabControl1_SelectedIndexChanged (отправитель как объект, e как EventArgs) обрабатывает TabControl1.SelectedIndexChanged «MsgBox (TabControl1.SelectedIndex)

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


End Sub
0 голосов
/ 23 мая 2012

лучше использовать следующий тип кода для выбора конкретного элемент в определенной вкладке ...

.

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

будет работать нормально ...

...