从DataTemplate获取UserControl

时间:2014-07-09 12:38:31

标签: c# xaml telerik datatemplate windows-phone-8.1

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

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

        </controls1:UserControl1>
</DataTemplate>

这个DataTemplate用于TransitionControl.ContentTemplate现在我想在C#CodeBehind中使用UserControl1对象。

像这样的东西

TransitionControl.ContentTemplate this DataTemplate will give me UserControl1 object.

1 个答案:

答案 0 :(得分:1)

您可以使用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控件的实例(好吧,所有实例,如果还有更多)。

P.S。调整方法只是寻找一个元素,而不是所有元素都是一个好主意,如果你只需要一个看起来就是这样的话。