2013-03-06 8 views
0

У меня есть пользовательский элемент управления `AutoCompleteTextBox в DataTemplate, как показано ниже:WPF Xaml доступа пользовательского контроля в DataTemplate

<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 в коде позади?

ответ

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; 
} 
Смежные вопросы