Переберите все кнопки на экране для данного тега WP7, используя C # - PullRequest
2 голосов
/ 01 февраля 2012

Я ищу простой способ перебрать все кнопки на экране для данного тега. Например, "Фу". Я использую WP7, используя C #. Я очень плохо знаком с платформой, так что будьте осторожны со мной: P

Поиск такого рода вещей мне тоже не подходит - я думаю, что у меня неправильная терминология, поэтому любые советы по этому вопросу также будут оценены.

Ответы [ 2 ]

5 голосов
/ 01 февраля 2012

Вам, вероятно, следует перебрать все элементы управления на своей странице, проверить, является ли каждый из них кнопкой, и если это так, проверить его свойство Tag.

Что-то вроде этого ...

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

Имейте в виду, однако, что если у вас есть вложенные элементы управления на странице, вам нужно подумать о том, чтобы вернуться к любому элементу с дочерними элементами, чтобы убедиться, что вы перехватываете все элементы управления.

2 голосов
/ 01 февраля 2012

Сначала создайте метод для рекурсивного перечисления элементов управления на вашей странице:

    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корневой элемент вашей страницы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...