資料模板簡化了 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中文網其他相關文章!