.net WPFMVVM集控聚焦
如何在MVVM中设置用户控件焦点?使用Focusmanager.FocusElement={Binding…}没有影响 这是我的XAML:.net WPFMVVM集控聚焦,.net,wpf,mvvm,.net,Wpf,Mvvm,如何在MVVM中设置用户控件焦点?使用Focusmanager.FocusElement={Binding…}没有影响 这是我的XAML: <DataTemplate DataType="{x:Type client:TelephoneNumberViewModel}"> <Grid FocusManager.FocusedElement="{Binding ElementName=TelephoneNumber}" Width="1024" Height="540"&
<DataTemplate DataType="{x:Type client:TelephoneNumberViewModel}">
<Grid FocusManager.FocusedElement="{Binding ElementName=TelephoneNumber}" Width="1024" Height="540">
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Margin="0 25 0 0" HorizontalAlignment="Left" Grid.Row="0" Grid.Column="1"
Grid.ColumnSpan="7" Name="textBlockQuestion"
TextWrapping="Wrap" Style="{DynamicResource TitleTextBlock}">"What is your telephone number?"</TextBlock>
<Grid Grid.Column="1" Grid.Row="1" Grid.RowSpan="7"
Grid.ColumnSpan="7" Height="460">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="80" />
<RowDefinition Height="80" />
<RowDefinition Height="80" />
<RowDefinition Height="80" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.RowSpan="5" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Top" HorizontalAlignment="Left">
<wpfclient:TelephoneBox Name="TelephoneNumber" TelephoneNumber="{Binding PhoneNumber, Mode=TwoWay}" />
<!--<TextBox Width="500" VerticalAlignment="Top" HorizontalAlignment="Left" FontSize="40" TextAlignment="Center" Text="{Binding PhoneNumber}"></TextBox>-->
<StackPanel Orientation="Horizontal" Margin="0 40 0 0">
<StackPanel Orientation="Vertical" Margin="0 0 60 0" >
<Button Margin="0 0 0 20" Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyMobileCommand}">Mobile</Button>
<Button Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyHomeCommand}">Home</Button>
</StackPanel>
<StackPanel Orientation="Vertical">
<Button Margin="0 0 0 20" Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyWorkCommand}">Work</Button>
<Button Style="{DynamicResource LargeGlossyButtonStyle}" Command="{Binding SurveyOtherCommand}">Other</Button>
</StackPanel>
</StackPanel>
</StackPanel>
</Grid>
<Grid Width="1024" Height="80" Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="8" VerticalAlignment="Bottom">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Margin="60 0 0 20" Grid.Column="0" Grid.Row="0" Name="buttonContinue"
Command="{Binding SurveySkipCommand}" Style="{DynamicResource LargeGlossyButtonStyle}"
>Skip</Button>
</Grid>
</Grid>
</DataTemplate>
“你的电话号码是多少?”
可移动的
家
工作
其他
跳过
只有I选项卡静止一次,用户控件才能获得焦点。使用
编辑后进行编辑:我不认为不看完整的代码就可以说,但我认为这可能是一个焦点范围问题。您正在将逻辑焦点设置为电话控件,但只有当该逻辑作用域为活动逻辑作用域时,才具有键盘焦点。我怀疑被模板化的控件之外的某些东西有自己的焦点作用域,直到您点击tab键,作用域才会移动到UserControl中。使用
编辑后进行编辑:我不认为不看完整的代码就可以说,但我认为这可能是一个焦点范围问题。您正在将逻辑焦点设置为电话控件,但只有当该逻辑作用域为活动逻辑作用域时,才具有键盘焦点。我怀疑被模板化的控件之外的某些东西有自己的焦点作用域,直到您点击tab键,该作用域才会移动到UserControl中。焦点的上下文是什么?它们是否与控件绑定,控件是否在添加新项时接收焦点
如果是后者,请确保数据模板所针对的列表框具有IsSynchronizedWithCurrentItem=“True”焦点的上下文是什么?它们是否与控件绑定,控件是否在添加新项时接收焦点
如果是后者,请确保数据模板所针对的列表框具有IsSynchronizedWithCurrentItem=“True”请查看我的更新。无论我将FocusManager.FocusedElement放置在何处,电话亭都不会获得焦点。请查看我的更新。无论我将FocusManager.FocusedElement放置在何处,电话盒都不会获得焦点。其基础是当加载viewmodel时,我希望电话盒能够聚焦以进行输入。我们正在使用Prism,因此ViewModel被设置为一个区域。您可能需要查看您的父元素,如果是具有焦点的父UserCOntrol,您可能需要确保父控件上的Focusable=“False”——不确定Prism如何声明父控件。如果您无法从代码中找到焦点,您可能需要使用Mole来查看焦点是什么。其基础是加载viewmodel时,我希望电话盒能够聚焦以进行输入。我们正在使用Prism,因此ViewModel被设置为一个区域。您可能需要查看您的父元素,如果是具有焦点的父UserCOntrol,您可能需要确保父控件上的Focusable=“False”——不确定Prism如何声明父控件。如果您无法从代码中找到焦点,您可能需要使用Mole来查看焦点是什么。