如何在FlipView中访问DataTemplate中的xaml Control

我想访问C#代码中的“image”元素。 我知道我无法直接访问它,因为它在datatemplate中。 我尝试过可视树,但仍然无法在代码中获得“图像”控制元素。

                                

我已经尝试过,我可以像你描述的那样访问FlipView DataTemplate内部的控件。 尝试以下方法,让我知道这是否有帮助。

 public static IEnumerable RecurseChildren(DependencyObject root) where T : UIElement { if (root is T) { yield return root as T; } if (root != null) { var count = VisualTreeHelper.GetChildrenCount(root); for (var idx = 0; idx < count; idx++) { foreach (var child in RecurseChildren(VisualTreeHelper.GetChild(root, idx))) { yield return child; } } } } 

访问图像控件:

 var imageControl = RecurseChildren(rootVisual).FirstOrDefault(); 

这里的rootVisual是我页面中的Grid实例。

这里回答https://stackoverflow.com/a/16446670/265706

简短的回答是:您遇到的问题是DataTemplate正在重复,而FlipView正在生成内容。 名称未公开,因为它会与之前生成的兄弟(或下一个将要生成的兄弟)冲突。

因此,要在DataTemplate中获取命名元素,您必须首先获取生成的项目,然后在该生成的项目内搜索所需的元素。 请记住,XAML中的逻辑树是您按名称访问事物的方式。 生成的项目不在逻辑树中。 相反,它们位于Visual Tree中(所有控件都在Visual Tree中)。 这意味着它必须在Visual Tree中搜索您要引用的控件。 VisualTreeHelper允许您执行此操作。