从DataTemplate中获取UserControl

本文关键字:UserControl 获取 DataTemplate | 更新日期: 2023-09-27 18:12:03

我有一个DataTemplate,我只是使用了一个UserControl。

DataTemplate x:Key="SampleDataTemplate">
        <controls1:UserControl1>
        </controls1:UserControl1>
</DataTemplate>

这个DataTemplate是在TransitionControl.ContentTemplate中使用的,现在我想要UserControl1对象在c# CodeBehind。

Something Like this

TransitionControl.ContentTemplate this DataTemplate will give me UserControl1 object.

从DataTemplate中获取UserControl

您可以使用VisualTreeHelperGetChildrenCountGetChild方法来获得所需的控件。这里有一个方法可以帮到你(如果需要的话可以调整一下):

private List<T> FindChildren<T>(DependencyObject startNode, List<T> results = null) where T : DependencyObject {
    if (results == null) results = new List<T>();
    int count = VisualTreeHelper.GetChildrenCount(startNode);
    for (int i = 0; i < count; i++) {
        DependencyObject current = VisualTreeHelper.GetChild(startNode, i);
        if ((current.GetType()).Equals(typeof(T)) || (current.GetType().GetTypeInfo().IsSubclassOf(typeof(T)))) {
            T realType = (T)current;
            results.Add(realType);
        }
        FindChildren<T>(current, results);
    }
    return results;
}

所以,你所需要做的就是调用FindChildren<UserControl1>(MyTransitionControlInstance),你会得到UserControl1控件的实例(好吧,所有的实例,如果有更多)。

注:这确实是一个好主意,调整方法,只寻找一个元素,而不是所有的元素,如果你只需要一个,似乎是这样的