1

我对这个问题感到非常沮丧,但也许它真的很微不足道,我只是看不出问题出在哪里。情况如下: 我有一个绑定到 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 事件中完成。

这个解决方案对我来说似乎很丑 - 任何其他解决这个问题的建议或方法仍然很好。

4

0 回答 0