XAML DataTemplate의 컨트롤 액세스: 실용 가이드
XAML DataTemplate 내의 컨트롤에 이름을 사용하여 직접 액세스하는 것은 까다로울 수 있습니다. 즉석에서 요소를 생성하는 DataTemplate의 동적 특성으로 인해 종종 이름 충돌이 발생합니다. 이를 극복하려면 VisualTreeHelper
클래스
방법 1: 재귀적 시각적 트리 탐색
재귀 함수는 시각적 트리를 효율적으로 탐색합니다. 이 예에서는 모든 하위 컨트롤을 찾는 AllChildren
메서드를 보여줍니다.
<code class="language-csharp">public List<Control> AllChildren(DependencyObject parent) { var children = new List<Control>(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is Control control) { children.Add(control); } children.AddRange(AllChildren(child)); } return children; }</code>
이 방법을 사용하면 시각적 트리 내에서 이름으로 컨트롤을 찾을 수 있습니다. 예를 들어, Image
의 선택된 항목에서 "img1"이라는 이름의 FlipView
을 찾으려면:
MyFlipView.SelectedItem
이 null이 아닌지 확인하세요.var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(MyFlipView.SelectedItem);
AllChildren(container)
을 사용하여 모든 하위 항목을 가져옵니다.Image
을 찾습니다.방법 2: TemplatedParent 활용
또는 TemplatedParent
속성을 사용하여 DataTemplate 내에서 상위 컨트롤에 액세스할 수 있습니다. 이 접근 방식에는 도우미 클래스가 필요합니다.
<code class="language-csharp">public class TemplatedControl<TControl> : ContentControl where TControl : FrameworkElement { public TemplatedControl(TControl control) { Content = control; } public TControl Child => (TControl)Content; }</code>
그런 다음 DataTemplate에서 다음을 수행합니다.
<code class="language-xaml"><datatemplate> <templatedcontrol x:Name="myImage"> <image ... /> </templatedcontrol> </datatemplate></code>
이제 상위 컨트롤의 Image
변수를 통해 myImage
컨트롤에 액세스할 수 있습니다.
두 가지 방법 모두 DataTemplate 내의 명명된 컨트롤에 액세스하기 위한 솔루션을 제공하여 데이터 기반 UI에 대한 더 많은 제어 기능을 제공합니다. 귀하의 코딩 스타일과 프로젝트 구조에 가장 적합한 방법을 선택하세요.
위 내용은 XAML DataTemplate 내의 컨트롤에 어떻게 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!