我使用Prism和MVVM创建了一个基本应用程序。目前,它只包括Shell和一个View/ViewModel。
在应用程序加载期间,我将View加载到主要区域,并显示在屏幕上。这个方法可行,但我无法让视图中的文本框获得焦点。尽管光标看起来在文本框内(虽然没有闪烁),但在我单击文本框之前,它不接受输入。
我已经在一个新项目中重新创建了这个问题,在该项目中,我只安装了prism/prism.unityextensions,设置了shell和view,并将视图加载到shell区域中。两个xaml文件都没有任何代码后备。
Shell
有人能指出我做错了什么吗?据我所知,
在应用程序加载期间,我将View加载到主要区域,并显示在屏幕上。这个方法可行,但我无法让视图中的文本框获得焦点。尽管光标看起来在文本框内(虽然没有闪烁),但在我单击文本框之前,它不接受输入。
我已经在一个新项目中重新创建了这个问题,在该项目中,我只安装了prism/prism.unityextensions,设置了shell和view,并将视图加载到shell区域中。两个xaml文件都没有任何代码后备。
Shell
<Window x:Class="MVVMFocusTest.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://www.codeplex.com/prism"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DockPanel LastChildFill="True">
<ContentControl Name="MainRegion" DockPanel.Dock="Top" prism:RegionManager.RegionName="MainRegion" />
</DockPanel>
</Grid>
</Window>
视图1
<UserControl x:Class="MVVMFocusTest.View1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<Grid FocusManager.FocusedElement="{Binding ElementName=Username}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Username</Label>
<TextBox Name="Username" Grid.Row="0" Grid.Column="1" ToolTip="Enter Username" TabIndex="0" />
<Label Grid.Row="1" Grid.Column="0">Password</Label>
<PasswordBox Grid.Row="1" Grid.Column="1" Name="LoginPassword" PasswordChar="*" ToolTip="Enter Password" TabIndex="1" />
</Grid>
</StackPanel>
</UserControl>
有人能指出我做错了什么吗?据我所知,
FocusManager.FocusedElement="{Binding ElementName=Username}"
应该足以设置焦点。