在 LongListSelector 中访问列表框和其他子项

本文关键字:其他 列表 LongListSelector 访问 | 更新日期: 2023-09-27 17:56:53

我正在构建一个应用程序,其中有一个任意长的项目列表,您可以在其中单击其中任何一个并就地进行编辑。当您编辑这些项目中的任何一项时,我希望以编程方式将焦点更改为列表中的下一项。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:LongListSelector x:Name="MainLongListSelector" Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="MainLongListSelector_SelectionChanged">
        <phone:LongListSelector.ItemTemplate>
            <DataTemplate>
              <StackPanel Margin="0,-10,0,-12">
                  <TextBox  x:Name ="tb" Text="{Binding TheText}" TextWrapping="Wrap" TextChanged="TextBox_TextChanged" />
              </StackPanel>
            </DataTemplate>
        </phone:LongListSelector.ItemTemplate>
    </phone:LongListSelector>
</Grid>

当用户在第一个文本框中键入并且他的文本超过某个 # 个字符(例如 138)时,我想将另一个项目作为下一个项目添加到列表中并更改焦点,或者,如果已经有下一个项目,请将焦点更改为它。

我不知道如何访问

1) 根列表框2) 给定列表框项 ID 的项中的文本框控件

这是我尝试过的。当此操作运行时,MainLongListSelector.SelectedITem = nextItem会导致选择下一个项目,但它不会获得焦点。

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) {
    var editBox = sender as TextBox;
    var selectedItem = MainLongListSelector.SelectedItem as ItemViewModel;
    if (editBox != null && selectedItem != null && editBox.Text.Length > 138) {
        // Move data at end to next box
        var overflow = editBox.Text.Substring(138, editBox.Text.Length - 138) ;
        selectedItem.Tweet = editBox.Text.Substring(0, 138);
        var nextItem = App.ViewModel.Items[int.Parse(selectedItem.ID) + 1];
        nextItem.Tweet = overflow;
        MainLongListSelector.SelectedItem = nextItem;
    }
}

我希望能够访问该nextItem的实际文本框,以便我可以显式设置焦点。

如果我只使用ListBox但问题不同,同样的问题也适用。在ListBox情况下,当DataTemplate包含TextBox并设置焦点时,我不会得到SelectionChanged事件......这就是为什么我坚持LongListSelector.

在 LongListSelector 中访问列表框和其他子项

如果我

理解正确,您希望在选择项目项时将文本框获得焦点。

如果这是你需要的,这里有一种方法可以将LisBoxItem.IsSelected绑定到Element.Focus():http://social.msdn.microsoft.com/Forums/en-US/adeb3e7f-16df-4c7b-b2d2-d7cdedb32ac0/setting-focus-of-a-textbox-inside-a-listbox?forum=wpf