我有一个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.
答案 0 :(得分:1)
您可以使用VisualTreeHelper
的GetChildrenCount
和GetChild
方法来获取所需的控件。这是一个有用的方法(必要时调整它):
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。调整方法只是寻找一个元素,而不是所有元素都是一个好主意,如果你只需要一个看起来就是这样的话。