数据模板中的WPF Xaml访问自定义控件

本文关键字:Xaml 访问 自定义控件 WPF 数据 | 更新日期: 2023-09-27 18:02:25

我在DataTemplate中有一个自定义控件' AutoCompleteTextBox ',如下所示:

<DataGridTextColumn.HeaderTemplate>
  <DataTemplate>
    <StackPanel Orientation="Vertical">
        <TextBlock
                                Text="{Binding Content, RelativeSource={RelativeSource Mode=TemplatedParent}}"
                                Margin="5" />
        <Border DockPanel.Dock="Top"
                                    HorizontalAlignment="Left"
                                    VerticalAlignment="Center"
                                    Padding="2">
            <uc:AutoCompleteTextBox x:Name="AutoTextBox" />
        </Border>
    </StackPanel>
  </DataTemplate>
</DataGridTextColumn.HeaderTemplate>

如何在代码后面访问AutoTextBox ?

数据模板中的WPF Xaml访问自定义控件

不能直接通过名称访问DataTemplate中的控件!但是你可以试着在VisualTree下面…

DependencyObject dgColumnHeader = GetYourColumnHeader();
var yourAutoCompleteTextBox = FindVisualChild<AutoCompleteTextBox>(dgColumnHeader);

public static T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(parent, i);
        if (child != null && child is T)
            return (T)child;
        else
        {
            T childOfChild = FindVisualChild<T>(child);
            if (childOfChild != null)
                return childOfChild;
        }
    }
    return null;
}