Windows phone 7 使用C循环浏览屏幕上给定标记WP7的所有按钮#

Windows phone 7 使用C循环浏览屏幕上给定标记WP7的所有按钮#,windows-phone-7,Windows Phone 7,我正在寻找一种简单的方法来循环浏览给定标签屏幕上的所有按钮。例如“foo”。我用的是WP7,用的是C。我对这个平台很陌生,所以对我放松点:P 谷歌搜索这类东西对我来说也不太合适——我想我的术语错了,所以任何关于这方面的提示都将不胜感激 首先,创建一个递归枚举页面中控件的方法: public static IEnumerable<FrameworkElement> FindVisualChildren(FrameworkElement control) {

我正在寻找一种简单的方法来循环浏览给定标签屏幕上的所有按钮。例如“foo”。我用的是WP7,用的是C。我对这个平台很陌生,所以对我放松点:P


谷歌搜索这类东西对我来说也不太合适——我想我的术语错了,所以任何关于这方面的提示都将不胜感激

首先,创建一个递归枚举页面中控件的方法:

    public static IEnumerable<FrameworkElement> FindVisualChildren(FrameworkElement control)
    {
        if (control == null)
        {
            yield break;
        }

        for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(control); i++)
        {
            var child = System.Windows.Media.VisualTreeHelper.GetChild(control, i) as FrameworkElement;


            if (child != null)
            {
                yield return child;

                foreach (var grandChild in FindVisualChildren(child))
                {
                    yield return grandChild;
                }
            }
        }
    }
公共静态IEnumerable FindVisualChildren(FrameworkElement控件)
{
if(control==null)
{
屈服断裂;
}
对于(int i=0;i
然后调用它并仅保留所需的控件:

        var buttons = FindVisualChildren(this.ContentPanel)
            .OfType<Button>()
            .Where(b => b.Tag is string && (string)b.Tag == "foo");
var buttons=FindVisualChildren(this.ContentPanel)
第()类
其中(b=>b.Tag是string&(string)b.Tag==“foo”);

(其中ContentPanel是页面的根元素)

您可能应该遍历页面上的所有控件,检查每个控件是否都是按钮,如果是,请检查其标记属性

像这样的

foreach (UIElement ctrl in ContentPanel.Children)
{
    if (ctrl.GetType() == typeof(Button))
    {
        Button potentialButton = ((Button)ctrl);
        if (potentialButton.Tag = Tag)
            return (Button)ctrl;
    }
}
但是,请记住,如果页面上有嵌套控件,则需要考虑递归到包含子项的任何项中,以确保捕获所有控件