无法在 userControl 中使 TextBox 自动对焦
Unable to make TextBox in userControl auto focus
我正在使用用户控件中的文本框,它将在主 window 中显示为弹出窗口。现在的问题是当弹出窗口打开时,文本框应该自动聚焦。
我尝试使用 control.Focus() 和 FocusManager.FocusedElement="{Binding ElementName=TextBoxName}" 但没有用。显示光标的弹出窗口,但直到我手动聚焦它时,字符才进入其中。
<TextBlock FontSize="16" Margin="5,0,0,3" VerticalAlignment="Center" HorizontalAlignment="Left" Text="e.g. Name"
Visibility="{Binding ElementName=TextBoxName, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBox x:Name="TextBoxName"
Text="{Binding Name}"
BorderThickness="0"
Foreground="Black"
FocusManager.FocusedElement="{Binding ElementName=TextBoxName}"
MaxLength="100"
FontSize="16"
Margin="3,1,1,1"
BorderBrush="Transparent"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Left"
TextChanged="TextBoxName_OnTextChanged"
Height="35">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding CreateCommand}"/>
</TextBox.InputBindings>
</TextBox>
请有人帮忙。
可能有更优雅的方法,但我以前用一个简短的代码来做到这一点。
我为 TextBox 的 Loaded 事件添加事件处理程序:
在XAML中:
<TextBox... Loaded="TextBox_Loaded">
后面的代码:
private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(delegate ()
{
Keyboard.Focus(TextBoxName);
}));
}
我正在使用用户控件中的文本框,它将在主 window 中显示为弹出窗口。现在的问题是当弹出窗口打开时,文本框应该自动聚焦。
我尝试使用 control.Focus() 和 FocusManager.FocusedElement="{Binding ElementName=TextBoxName}" 但没有用。显示光标的弹出窗口,但直到我手动聚焦它时,字符才进入其中。
<TextBlock FontSize="16" Margin="5,0,0,3" VerticalAlignment="Center" HorizontalAlignment="Left" Text="e.g. Name"
Visibility="{Binding ElementName=TextBoxName, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBox x:Name="TextBoxName"
Text="{Binding Name}"
BorderThickness="0"
Foreground="Black"
FocusManager.FocusedElement="{Binding ElementName=TextBoxName}"
MaxLength="100"
FontSize="16"
Margin="3,1,1,1"
BorderBrush="Transparent"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Left"
TextChanged="TextBoxName_OnTextChanged"
Height="35">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding CreateCommand}"/>
</TextBox.InputBindings>
</TextBox>
请有人帮忙。
可能有更优雅的方法,但我以前用一个简短的代码来做到这一点。
我为 TextBox 的 Loaded 事件添加事件处理程序:
在XAML中:
<TextBox... Loaded="TextBox_Loaded">
后面的代码:
private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(delegate ()
{
Keyboard.Focus(TextBoxName);
}));
}