我有一个列表框,我已经在其中设置了一个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;
答案 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;
}