如何在Silverlight中的ControlTemplate中访问Control?

时间:2012-01-11 14:49:12

标签: wpf silverlight silverlight-4.0 wpf-controls silverlight-3.0

我有以下代码:

ControlTemplate ct = (ControlTemplate)XamlReader.Load(validXmlString);

现在我需要获取此模板创建的控件,在我的例子中,是一个Button。我已经进行了广泛的搜索,无法找到一个简单的解释。

请注意,由于某些无法解释的原因,Microsoft在WPF中为ControlTemplate提供了FindControl()方法,但在Silverlight中不是。我已经读过这可以用VisualTreeHelper完成,但我还没有看到如何解释。

1 个答案:

答案 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);
            }
        }
    }

希望这有帮助