Bor*_*sky 0 c# wpf xaml listview windows-store-apps
我想在listview中获取所选项目.但我想得到没有绑定的项目,我想获得视图,即被选中.所以在我的情况下:
<ListView.ItemTemplate>
<DataTemplate>
<local:MyCustomUserControl BindedItem="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
我想获取现在选中的MyCustomUserControl对象.谢谢,对不起,如果之前有类似问题.
您可以获取基础容器,即ListViewItem使用ItemContainerGenerator和从中获取您可以通过遍历获得控制权VisualTree.
首先给x:Name你的ListView,以便你可以使用该名称从后面的代码访问它:
<ListView x:Name="listView">
...
</ListView>
Run Code Online (Sandbox Code Playgroud)
其次,从ItemContainerGeneratorVisualTree 获取容器并遍历VisualTree以获取您的子UserControl:
var listViewItem = listView.ItemContainerGenerator
.ContainerFromItem(listView.SelectedItem);
var customControl = FindChildControl<MyCustomUserControl>(listViewItem);
Run Code Online (Sandbox Code Playgroud)
其中FindChildControl是遍历Visual Tree的辅助方法:
private T FindChildControl<T>(DependencyObject control)
where T : DependencyObject
{
T foundChild = null;
int childNumber = VisualTreeHelper.GetChildrenCount(control);
for (int i = 0; i < childNumber; i++)
{
var child = VisualTreeHelper.GetChild(control, i);
if (child != null && child is T)
foundChild = (T)child;
else
foundChild = FindChildControl<T>(child);
}
return foundChild;
}
Run Code Online (Sandbox Code Playgroud)
注意:如果在Windows 8.1中使用Windows应用商店应用,如果您尚未设置,则ItemContainerGenerator将返回nullItemsPanel.而是直接在控件上使用相同的方法.在下面的例子中,listView.ItemContainerGenerator.ContainerFromItem将改为listView.ContainerFromItem.
| 归档时间: |
|
| 查看次数: |
1744 次 |
| 最近记录: |