C# Listview中的TextBox-获取TextBox上的ListViewItem TextChanged
我有一个C# Listview中的TextBox-获取TextBox上的ListViewItem TextChanged,c#,wpf,xaml,C#,Wpf,Xaml,我有一个列表视图,它显示一些文本框。对于每个文本框,我将捕获一个SelectionChanged事件 我的XAML文件如下所示: <ListView> <GridView> ... <DataTemplate> <TextBox SelectionChanged="Box_SelectionChanged" /> </DataTemplate>
列表视图
,它显示一些文本框
。对于每个文本框
,我将捕获一个SelectionChanged
事件
我的XAML文件如下所示:
<ListView>
<GridView>
...
<DataTemplate>
<TextBox SelectionChanged="Box_SelectionChanged" />
</DataTemplate>
...
</GridView>
</ListView>
private void Box_SelectionChanged(object sender, TextChangedEventArgs e) {}
在我的框\u selection changed
函数中,我想获取更新文本框的列表视图项
我该怎么做?您可以尝试以下方法:
将此方法添加到类:
public static T FindVisualParent<T>(UIElement element) where T : UIElement
{
UIElement parent = element; while (parent != null)
{
T correctlyTyped = parent as T; if (correctlyTyped != null)
{
return correctlyTyped;
}
parent = VisualTreeHelper.GetParent(parent) as UIElement;
} return null;
}
公共静态T findvisualpart(UIElement元素),其中T:UIElement
{
UIElement父元素=元素;而(父元素!=null)
{
T correctlyTyped=父级为T;if(correctlyTyped!=null)
{
返回正确类型;
}
parent=VisualTreeHelper.GetParent(parent)作为UIElement;
}返回null;
}
并在框中选择已更改的事件处理程序调用此方法:
private void Box_SelectionChanged(object sender, RoutedEventArgs e)
{
var tmp = FindVisualParent<ListViewItem>(sender as TextBox);
}
private void Box\u选择已更改(对象发送方、路由目标方)
{
var tmp=FindVisualParent(发送方为文本框);
}
您可以尝试以下方法:
将此方法添加到类:
public static T FindVisualParent<T>(UIElement element) where T : UIElement
{
UIElement parent = element; while (parent != null)
{
T correctlyTyped = parent as T; if (correctlyTyped != null)
{
return correctlyTyped;
}
parent = VisualTreeHelper.GetParent(parent) as UIElement;
} return null;
}
公共静态T findvisualpart(UIElement元素),其中T:UIElement
{
UIElement父元素=元素;而(父元素!=null)
{
T correctlyTyped=父级为T;if(correctlyTyped!=null)
{
返回正确类型;
}
parent=VisualTreeHelper.GetParent(parent)作为UIElement;
}返回null;
}
并在框中选择已更改的事件处理程序调用此方法:
private void Box_SelectionChanged(object sender, RoutedEventArgs e)
{
var tmp = FindVisualParent<ListViewItem>(sender as TextBox);
}
private void Box\u选择已更改(对象发送方、路由目标方)
{
var tmp=FindVisualParent(发送方为文本框);
}
@Bob.-我曾尝试将发送者转换为文本框,以查看是否可以从中获取ListViewItem,但没有运气当您调试时,发送者显示为什么类型的对象?@Bob。它的类型是System.Windows.Controls.TextBox
Odd,在调试器的可视化树中,您无法找到ListView@Bob. - 我曾尝试将发送者转换为文本框,以查看是否可以从中获取ListViewItem,但没有运气当您调试时,发送者显示为什么类型的对象?@Bob。它的类型是System.Windows.Controls.TextBox
Odd,在调试器的可视化树中,您无法找到ListViewCool,谢谢。有没有办法通过sender对象中的属性或方法获取父对象,或者每次都必须对整个ListView执行搜索?不客气。您不会对整个ListView执行搜索,每次调用此方法时只检查7个元素。你可以在Snoop()中查看这个。很酷,谢谢。有没有办法通过sender对象中的属性或方法获取父对象,或者每次都必须对整个ListView执行搜索?不客气。您不会对整个ListView执行搜索,每次调用此方法时只检查7个元素。您可以在Snoop()中检查这一点。