设置文本框焦点的问题

时间:2018-03-27 13:10:08

标签: c# wpf xaml uwp

我正在使用MVVM模式处理UWP应用程序,下面是我设置焦点的代码片段,但它没有将焦点设置为文本框。

XAML

<TextBox FontWeight="Bold" FontSize="32" Text="{Binding ProSeg1, Mode= TwoWay}" TextAlignment="Center" MaxLength="3" 
                             x:Name="txtSeg" KeyUp="txtSeg_KeyUp"
                             Style="{StaticResource textboxTemplate}" Width="105" />

UserControl.xaml.cs

//this code is executed from constructor.
bool val = txtSeg.Focus( FocusState.Keyboard);

变量val始终返回false。在另一个实例中,相同的代码用于另一个TextBox,但它由Button事件触发,并且工作正常。

2 个答案:

答案 0 :(得分:0)

在构造函数中调用Focus为时尚早,因为控件尚未准备好接收焦点并始终返回false。您必须等到用户控制或至少TextBox完全加载。在构造函数中附加Loaded事件:

this.Loaded += UserControl_Loaded;

并添加以下事件处理程序:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    txtSeg.Focus(FocusState.Programmatic);
}

另请注意,您应使用FocusState.Programmatic,因为Keyboard是保留的,当控件使用 Tab 键自然获得焦点时,Programmatic用于设置专注于代码。

答案 1 :(得分:0)

您应该检查您的XAML是否已加载。如果在Window构造函数中设置焦点,则视图将无法加载,因此您必须将@GetMapping public ResponseEntity<MyResponse> doSomething(UriComponentsBuilder uriComponentsBuilder) { URI someNewUriBasedOnCurrentRequest = uriComponentsBuilder .replacePath(null) .replaceQuery(null) .pathSegment("some", "new", "path") .build().toUri(); //... } 置于Loaded事件中。

txtSeg在窗口加载之前不会聚焦

您可以附加到已加载的窗口或文本框已加载以聚焦到您的文本框