2014-04-06 43 views
0

我正在構建一個應用程序,其中有一個任意長的項目列表,您可以在其中點擊任意項目並進行編輯。在編輯這些項目時,我想以編程方式將焦點更改爲列表中的下一項。訪問列表框和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

回答

相關問題