数据模板简化了 XAML 中的项目渲染,但由于视觉树和逻辑树分离,访问内部控件提出了挑战。 Name
属性不能直接在 FlipView
的 DataTemplate
中使用,因为多个模板实例之间可能存在命名冲突。
解决方案在于使用 VisualTreeHelper
遍历可视化树并找到每个生成项中的特定控件。
辅助功能:
此函数递归地在可视化树中搜索具有给定名称的控件:
<code class="language-csharp">public T FindChildControl<T>(DependencyObject control, string ctrlName) where T : DependencyObject { int childNumber = VisualTreeHelper.GetChildrenCount(control); for (int i = 0; i < childNumber; i++) { DependencyObject child = VisualTreeHelper.GetChild(control, i); FrameworkElement fe = child as FrameworkElement; if (fe != null && fe.Name == ctrlName) { return child as T; } else { T nextLevel = FindChildControl<T>(child, ctrlName); if (nextLevel != null) return nextLevel; } } return null; }</code>
访问控件:
要从当前选定的 Image
项目中检索控件(例如,名为“img1”的 FlipView
),请使用以下代码:
<code class="language-csharp">var selectedItem = MyFlipView.SelectedItem; if (selectedItem == null) return null; var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(selectedItem); Image img1 = FindChildControl<Image>(container, "img1");</code>
这将检索 Image
控件。 如果找不到控件,请记住处理 null
情况。
以上是如何访问 FlipView 中 XAML 数据模板中的控件?的详细内容。更多信息请关注PHP中文网其他相关文章!