繁体   English   中英

DataTemplate中的WPF Xaml访问自定义控件

[英]WPF Xaml Access Custom control in DataTemplate

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

不能直接通过名称访问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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM