在 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
.
如果我
理解正确,您希望在选择项目项时将文本框获得焦点。
如果这是你需要的,这里有一种方法可以将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