0

我在 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在后面的代码中访问?

4

1 回答 1

0

不能直接按名称访问 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;
}
于 2013-03-06T11:09:10.967 回答