Как создать массив пользовательских элементов управления / индексирования пользовательских элементов управления в C # / Silverlight? - PullRequest
0 голосов
/ 04 января 2011

Я старый пользователь массива элементов управления в VB еще в те времена. Сейчас его нет, поэтому я ищу замену.

Я создал пользовательский элемент управления в C # для Silverlight. Этот элемент управления предоставляет свойство bool IsChecked.

<ImageButton Name"imgbutton1" IsChecked="True"/>
<ImageButton Name"imgbutton2" IsChecked="False"/>
<ImageButton Name"imgbutton3" IsChecked="False"/>

В дочернем окне я заполняю серию этих элементов управления и использую их как эквивалент RadioButtons, то есть, когда я нажимаю один, любой другой, имеющий IsChecked = true, будет установлен в false, для которого я думал делать что-то вроде:

List<ImageButton> imgButtons= new List<ImageButton>();
imgButtons.Add(imgbutton1);
imgButtons.Add(imgbutton2);
imgButtons.Add(imgbutton3);

Затем, чтобы очистить все их IsChecked, кроме того, который мне нужен (указан некоторой переменной 'index'), я бы сделал что-то вроде:

foreach (ImageButton imgbutton in imgButtons) imgbutton.IsChecked = false;
imgbuttons[index].IsChecked = true;

У меня проблема в том, что List<ImageButton> не компилируется. Я очень слабо разбираюсь в коллекциях и не могу понять, чего мне не хватает. Я могу сделать для стандартных элементов управления, но не позволяет мне получить пользовательский элемент управления там.

Спасибо!

PS: я думал только о настройке элемента управления RadioButton, но у меня нет Blend, и я использую этот элемент управления изображением для других типов элементов управления. Однако, если вы считаете, что есть лучший способ реализовать это, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: Компилятор говорит: «Не удалось найти тип или имя пространства имен« ImageButton »(отсутствует директива using или ссылка на сборку?) '

Ответы [ 4 ]

3 голосов
/ 04 января 2011

Убедитесь, что в вашем коде есть ссылка на ваш элемент управления «ImageButton» (в части «using»).

Чтобы сделать это автоматически, вы можете просто щелкнуть правой кнопкой мыши на «ImageButton» в вашем коде и нажать «Resolve», он автоматически добавит ссылку

2 голосов
/ 04 января 2011

Вы не сказали нам, что было ошибкой компилятора, когда вы сказали "Список не компилируется" .

Я предполагаю, что вам нужно включить пространство имен коллекции List в ваш файл.

using System.Collections.Generic;
1 голос
/ 04 января 2011

Просто подумал о чем-то другом, я не уверен, почему вы держите список <> ваших кнопок ImageButton, если они находятся на дисплее (в этом дочернем окне). Если они все находятся в одном контейнере, вы можете использовать что-то вроде:

// here "grd" is your Grid container, it could be another type of container though
foreach (ImageButton imgBtn in grd.Children.OfType<ImageButton>())
                imgBtn.IsChecked = false;
0 голосов
/ 27 апреля 2012

. Это может помочьГлобальная переменная

   private UserControl1[] userControl11=new WindowsFormsApplication1.UserControl1[3];

и теперь массив пользовательского управления

, вы можете записать его на кнопку

this.SuspendLayout();
            Random r=new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < 3; i++)
            {

                userControl11[i] = new UserControl1();
                this.userControl11[i].formColor = Color.FromArgb(r.Next(255),r.Next(255),r.Next(255));
                this.userControl11[i].Location = new System.Drawing.Point(133 , 133*(i+1));
                this.userControl11[i].Name = "userControl11";
                this.userControl11[i].Size = new System.Drawing.Size(278, 133);
                this.userControl11[i].TabIndex = 0;
                this.Controls.Add(this.userControl11[i]);
            }
            ;
...