我正在構建一個應用程序,其中有一個任意長的項目列表,您可以在其中點擊任意項目並進行編輯。在編輯這些項目時,我想以編程方式將焦點更改爲列表中的下一項。訪問列表框和LongListSelector中的其他子項目
<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>
如在第一個TextBox的用戶類型和他的文字超出字符的某些#(如138),我想要麼到列表中的下一個項目,並改變焦點添加另一個項目,或者,如果已經有下一個項目,請將焦點改爲它。
我無法弄清楚如何獲得訪問
1)根列表框中 2)給出一個列表框項目ID
項目中的TextBox控件這裏是我的嘗試。運行時,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
。
這似乎適用於WPF。我不認爲相對綁定的東西適用於WP。 – tig