从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.
您可以使用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控件的实例(好吧,所有的实例,如果有更多)。
注:这确实是一个好主意,调整方法,只寻找一个元素,而不是所有的元素,如果你只需要一个,似乎是这样的