【问题标题】:WPF Xaml Access Custom control in DataTemplateDataTemplate 中的 WPF Xaml 访问自定义控件
【发布时间】:2013-03-06 10:23:04
【问题描述】:

我在 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

【问题讨论】:

    标签: c# wpf datatemplate


    【解决方案1】:

    无法通过名称直接访问 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-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多