事件SelectionChanged of listbox如何获取文本块文本值wp8

时间:2014-03-04 14:24:44

标签: c# windows-phone-8

我有一个列表框,我已经在其中设置了一个stackpanel和textblock。我想要最后一个文本块的文本,因为我通过使用转换器在上一个文本框文本上设置了一个值。

下面发布的代码由我尝试并且无效

 private void listname_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string textt = (((sender as ListBox) as StackPanel).Children[1] as TextBlock).Text; 

        //StackPanel sPanel = (sender as StackPanel) as StackPanel;
        //var tbxCollection = from tbx in sPanel.Children.OfType<TextBlock>()
        //                    where tbx.Name == "bl"
        //                    select tbx;

2 个答案:

答案 0 :(得分:2)

如果您想在ContentControl(ListBoxItem)中搜索控件,则可以使用VisualTreeHelper class来实现此目的。

下面的代码将帮助您在DependencyObject中搜索特定的控件 - parent:

private static void SearchForControls<T>(DependencyObject parent, ref List<T> controlList) where T : DependencyObject
{
    int numberOfChildreen = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < numberOfChildreen; i++)
    {
       var child = VisualTreeHelper.GetChild(parent, i);
       if (child is T) controlList.Add((T)child);
       else SearchForControls<T>(child, ref controlList);
    }
}

通过这些代码,您可以设法完成以下任务:

private void myList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ListBoxItem item = (sender as ListBox).ItemContainerGenerator.ContainerFromIndex((sender as ListBox).SelectedIndex) as ListBoxItem;
    List<StackPanel> controlList = new List<StackPanel>();
    SearchForControls<StackPanel>(item, ref controlList);
    string text = (controlList[0].Children[1] as TextBlock).Text;
}

在上面的代码中,在controlList中,您将获得StackPanels的所有SelectedItem(由SelectedIndex访问)。对于这个例子,我假设你有一个StackPanel - 希望这对你有帮助。尝试调试它,你会看到它是如何工作的。

答案 1 :(得分:0)

订阅文本块会更好更容易点击事件

<DataTemplate>
<Textblock name="myTxtBlock" Tap="myTxtBlock_Tap"/>
</DataTemplate>

代码:

private void myTxtBlock_Tap(object sender, GestureEventArgs e)
{
string text=(Sender as Textblock).Text;
}