我有以下代码:
ControlTemplate ct = (ControlTemplate)XamlReader.Load(validXmlString);
现在我需要获取此模板创建的控件,在我的例子中,是一个Button。我已经进行了广泛的搜索,无法找到一个简单的解释。
请注意,由于某些无法解释的原因,Microsoft在WPF中为ControlTemplate提供了FindControl()方法,但在Silverlight中不是。我已经读过这可以用VisualTreeHelper完成,但我还没有看到如何解释。
答案 0 :(得分:1)
下面您将找到一个示例,它以递归方式循环遍历Visual Tree,并找到将它们添加到集合中的所有按钮。您可以检查按钮的名称等。并执行您需要执行的操作。我只是用一个集合作为例子,因为我发现了一个快速的样本。
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
List<UIElement> buttons = new List<UIElement>();
GetChildren(this, typeof(Button), ref buttons);
}
private void GetChildren(UIElement parent, Type targetType, ref List<UIElement> children)
{
int count = VisualTreeHelper.GetChildrenCount(parent);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
UIElement child = (UIElement)VisualTreeHelper.GetChild(parent, i);
if (child.GetType() == targetType)
{
//DO something with the button in the example added to a collection. You can also verify the name and perform the action you wish.
children.Add(child);
}
GetChildren(child, targetType, ref children);
}
}
}
希望这有帮助