Установить фокус текстового поля, когда tabItem выбран в WPF vb

Новичок в WPF, знаю, что у них много вопросов по этому вопросу, но ни один из них не работал Я хотел бы, чтобы текстовое поле внутри вкладки получало фокус, когда вкладка выбрана.

в настоящее время есть

Private Sub TabControl1_Event(sender As Object, e As System.Windows.Controls.SelectionChangedEventArgs) 
_Handles TabControl1.SelectionChanged
    UpdateLayout()     'tried me.show() as well
    If TabControl1.SelectedIndex = 0 Then
        i = i + 1
        Title = "selected" + Convert.ToString(i)
        UserBox.Focus()
    End If
End Sub

Инкремент i и изменение заголовка предназначены только для того, чтобы увидеть, вводится ли цикл if и, по-видимому, так и есть, однако текстовое поле (единственный другой элемент управления в приложении) получает фокус только при первом запуске программы.

Как я уже сказал, я видел много других вопросов, подобных этому, но они либо не совпадают, либо просто не работают. Я использую vb.net в приложении WPF. Кажется, что это должно быть очень просто, но я не могу понять это

Было бы хорошо, если бы это можно было сделать через событие tabItem, а не через событие tabControl.

Обновление: IDK, если это имеет значение, но я видел, как другие публикуют его, и поэтому это мой XAML

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Burn In" Height="350" Width="525">
<TabControl Height="Auto" Name="TabControl1" Width="Auto">
    <TabItem Header="User" Name="UserTab">
        <Grid>
            <TextBox Height="25" HorizontalAlignment="Center" Margin="0" Name="UserBox" VerticalAlignment="Center" Width="250" AcceptsReturn="True" />
        </Grid>
    </TabItem>
    <TabItem Header="DUT" Name="DutTab">
        <Grid />
    </TabItem>
    <TabItem Header="Rack" Name="RackTab">
        <Grid />
    </TabItem>
    <TabItem Header="Programs" Name="ProgTab">
        <Grid />
    </TabItem>
</TabControl>
</Window>

1 ответ

Решение

Я проверил этот код на своем компьютере, и он работал нормально.

Private Sub TabControl1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
        If TabControl1.SelectedIndex = 1 Then
            TabControl1.Update()
            TextBox1.Focus()
        End If
    End Sub

Я объявил об изменении вкладки с помощью подпрограммы TabControl1_SelectedIndexChanged. Если вы не уточняете, что TabControl1 изменен, вам нужно щелкнуть на TabPage, чтобы изменения вступили в силу.

Другие вопросы по тегам