Пройдя через элементы управления в обертке - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть набор элементов управления, расположенных в обертке в приложении WPF, которые создаются процедурно.Первым элементом управления является метка, за которой следует группа комбо-боксов и флажок.Пользователь нажимает кнопку и добавляется новый ряд элементов управления.Это работало нормально.Затем я решил сделать ярлык немного более привлекательным, выделив ему красный круг в качестве фона, и ярлык был вложен в сетку с красным кружочком за ярлыком, который просто перечислял номер строки.Это работало нормально.И я использую, чтобы пройти через все элементы управления с этим блоком:

 foreach (Control item in WrapPanelItems.Children)
            {
                if (item.GetType() == typeof(CheckBox))
                {
                    RowCounter++;
                }
            }

теперь внезапно этот блок кода завершается с ошибкой: «Невозможно привести объект типа« System.Windows.Controls.Grid »квведите 'System.Windows.Controls.Control'. '

Так что я подозреваю, что сетка не является обычным элементом, и код завершается ошибкой.Но как бы я затем перебирал элементы управления без сбоев приложения и все же перебирал все обычные элементы управления поверх него?

Вот код для стиля и добавления метки.

        Grid MyGrid= new Grid();

        Ellipse myEllipse = new Ellipse();

        SolidColorBrush mySolidColorBrush = new SolidColorBrush();

        mySolidColorBrush.Color = Color.FromArgb(255, 107, 142, 35);

        myEllipse.Fill = mySolidColorBrush;

        myEllipse.Width = 20;
        myEllipse.Height = 20;

        MyGrid.Children.Add(myEllipse);

        Label LabelCounter = new Label();
        LabelCounter.Content = RowCount.ToString();

        MyGrid.Children.Add(LabelCounter);
        LabelCounter.VerticalAlignment = VerticalAlignment.Center;
        LabelCounter.HorizontalAlignment = HorizontalAlignment.Center;

        WrapPanelItems.Children.Add(MyGrid);

А также второй вопрос.Предположим, я хочу изменить текст на метке ... как бы я попал на метку, если она вложена в сетку?Можете ли вы просто изменить содержимое непосредственно, когда цикл FOR поднимает сетку?Или тогда вы должны сказать все дочерние элементы сетки, когда сетка определена в цикле FOR?

tx

1 Ответ

0 голосов
/ 15 ноября 2018

Grid не является System.Windows.Controls.Control, поэтому в этой строке выдается исключение:

foreach (Control item in WrapPanelItems.Children)

Вы можете заменить Control на UIElement, чтобы избежать этой ошибки.


Согласно MSDN :

public class Grid : System.Windows.Controls.Panel, System.Windows.Markup.IAddChild 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...