最近在做一个小练习,就是出口算题,然后显示在界面上如下图
我把一系列的口算题通过绑定的方式显示在ListView中,这时候问题来了:
我想达到用户按Tab键就可以将焦点移动到下一个文本框的效果,但是目前的做法没办法移动焦点,有没解决办法呢?最好是用MVVM绑定解决,那样判分什么的功能就好做了。我的Xaml代码是这样的
<ListView HorizontalAlignment="Stretch" Name="listView1" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Expressions}" Grid.Row="1" Padding="15 0"> <ListView.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="AliceBlue" Offset="0" /> <GradientStop Color="#FF0DF5F5" Offset="1" /> </LinearGradientBrush> </ListView.Background> <ListView.ItemContainerStyle> <Style> <Setter Property="KeyboardNavigation.IsTabStop" Value="False" /> </Style> </ListView.ItemContainerStyle> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapPanel ItemWidth="240" ItemHeight="50" IsItemsHost="True" KeyboardNavigation.IsTabStop="False" Width="{Binding ActualWidth,RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Path=Expression}" FontSize="20" FontWeight="Bold" Style="{StaticResource ResourceKey=TextBlockMargin}"></TextBlock> <TextBlock FontSize="20" FontWeight="Bold" Style="{StaticResource ResourceKey=TextBlockMargin}">=</TextBlock> <TextBox Text="{Binding Path=UserAnswer,Mode=TwoWay}" FontSize="20" FontWeight="Bold" Width="60" Style="{StaticResource ResourceKey=TextBoxExam}"></TextBox> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView>
各位达人给个建议吧。
先写个FocusHelper类,里面写个IsFocused附加属性,通过这个属性来控制获取焦点。
再在ViewModel里写个IsFoucsed属性,在 TextBox绑定FocusHelper.IsFoucsed="{Binding IsFocused}" ,就可以通过MVVM来控制焦点了。
谢谢您的回复,试来试去还是没有实现您说的这种方式……