我对这个问题感到非常沮丧,但也许它真的很微不足道,我只是看不出问题出在哪里。情况如下: 我有一个绑定到 ItemsSource 的 ListView。根据类型,DataTemplateSelector 决定使用哪个模板。
如果我通过控件(文本框)选项卡一切正常。只要我在文本框中输入一个值,然后从文本框属性中跳出标签,就会调用此属性的更改。我的控件得到更新。一切正常,但问题来了:当控件更新时,焦点不会移动到下一个制表位,而是跳转到 ListView。我该如何禁用它?我怎样才能让它移动焦点,就像没有输入数据并且没有引发属性更改一样?
提前致谢
更新:XAML 的一部分,如果您需要更多信息,请告诉我
更新 2 :在 ListView 上设置 Focusable=false 后,如果 PropertyChanged 被提升,焦点现在会跳出整个 ListView 控件
ListView 声明:
<ListView x:Name="ListViewFields"
KeyboardNavigation.TabNavigation="Cycle"
KeyboardNavigation.IsTabStop="False"
ItemsSource="{Binding Path=Fields}"
ItemTemplateSelector="{StaticResource ControlDataTemplateSelector}"
ItemContainerStyle="{StaticResource ListViewItemStyle}"
Template="{StaticResource listViewTemplate}"
Grid.IsSharedSizeScope="true">
</ListView>
模板示例:
<DataTemplate x:Key="singleLineOfTextTemplate">
<Grid Style="{StaticResource GridStyle}">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="MyFirstColumn" />
<ColumnDefinition SharedSizeGroup="MySecondColumn" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" IsTabStop="False"
Content="{Binding Path=Name}"
/>
<TextBox Grid.Column="1" x:Name="inputControl" IsTabStop="True"
Text="{Binding Path=Value, Mode=TwoWay}"
MinWidth="150"/>
</Grid>
</DataTemplate>
更新 3: 在 ListViewItems 的焦点丢失事件中,我可以看到焦点有时设置为 DisconnectedItem(请参阅SO 上的 DisconnectedItem ,这可能是我有这种行为的原因。
我现在通过手动恢复焦点来解决我的问题。在 ListViewItem GotFocus 和 LostFocus 事件中,我存储选定的 ListViewItem 并在需要恢复焦点时设置一个标志,然后可以在 ItemContainerGenerator.StatusChanged 事件中完成。
这个解决方案对我来说似乎很丑 - 任何其他解决这个问题的建议或方法仍然很好。