데이터 템플릿은 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 DataTemplate 내의 컨트롤에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!