如何在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允许您执行此操作。
- Nlog给出exception可能的解释是缺少零arg和单个arg Common.Logging.Configuration.NameValueCollection构造函数
- 使用reflection,在已存在的对象上调用Field的方法
- Skip的性能(以及类似function,如Take)
- 添加到ObjectSet 的对象的多态删除不会引发ObjectSet上的IBindingList.ListChanged .IListSource.GetList()
- .net中的Tag属性有什么用处
- OOP中的默认参数是不好的做法吗?
- 如何编写自定义PowerShell主机
- Resize和SizeChanged事件之间的区别
- 如何使用C#中的属性列表反序列化元素