我正在使用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
事件触发,并且工作正常。
答案 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在窗口加载之前不会聚焦
您可以附加到已加载的窗口或文本框已加载以聚焦到您的文本框