使用C#循环显示给定标签WP7的屏幕上的所有按钮

时间:2012-02-01 07:22:12

标签: windows-phone-7

我正在寻找一种简单的方法来遍历给定标签的屏幕上的所有按钮。例如“foo”。我正在使用WP#,使用C#。我对这个平台很新,所以对我很轻松:P

谷歌搜索这种东西对我来说也不是很有效 - 我认为我的术语有误,所以任何有关这方面的提示都会受到赞赏。

2 个答案:

答案 0 :(得分:5)

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

像这样......

foreach (UIElement ctrl in ContentPanel.Children)
{
    if (ctrl.GetType() == typeof(Button))
    {
        Button potentialButton = ((Button)ctrl);
        if (potentialButton.Tag = Tag)
            return (Button)ctrl;
    }
}

请记住,如果您在页面上嵌套控件,则需要考虑递归到包含子项的任何项目,以确保捕获所有控件。

答案 1 :(得分:2)

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

    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;
                }
            }
        }
    }

然后调用它并仅保留您想要的控件:

        var buttons = FindVisualChildren(this.ContentPanel)
            .OfType<Button>()
            .Where(b => b.Tag is string && (string)b.Tag == "foo");

(其中ContentPanel是您网页的根元素)