Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885

UserControl vs CheckBox or RadioButton WPF

25.09.2016, 16:01. Показов 1413. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите в следующем вопросе.

Из Json/Xml Извлекаются данные, в виде вопрос и варианты ответа.
Как можно, в зависимости от того - сколько ответов, привязать CheckBox или RadioButton.
Или как можно реализовать подобный опросник(тестирование) в WPF?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.09.2016, 16:01
Ответы с готовыми решениями:

UserControl vs CheckBox or RadioButton Win Form
Помогите в следующем вопросе. Из Json/Xml Извлекаются данные, в виде вопрос и варианты ответа. Как можно, в зависимости от того -...

UserControl in WPF
Добрый день всем. Просерфил интернет в поисках ответа и помощи, но по существу ничего не нашел. Речь идет о кастомном элементе управления...

CheckBox и RadioButton
Есть GroupBox1. На ней кнопка CheckBox1. RadioGroup1 на ней RadioButton1,RadioButton2,RadioButton3,RadioButton4,RadioButton5,RadioButton6....

12
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
25.09.2016, 16:49
EveKS, забинди список ответов к ListBox'у, в шаблоне которого вставь CheckBox.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
25.09.2016, 16:54  [ТС]
nestquik2, ну у меня была мысль обойтись без RadioButton, это всё упростит =). Но всё же хочется гибрид.
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
25.09.2016, 16:55
EveKS, входные данные задаешь ты? Покажи пример.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
25.09.2016, 17:25  [ТС]
nestquik2, еще не чего нет. Т.к. это будет проблемкой для меня(вью), вот и спросил. В нете уже нашел что-то подобное, точнее использование разных юсер контролов. Да и в соседней теме дали подобный ответ.
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
25.09.2016, 17:30
EveKS, тут все зависит от того, как ты работаешь с данными. Если через сериализацию модели, то все очень просто.
0
Заблокирован
25.09.2016, 18:02
Цитата Сообщение от EveKS Посмотреть сообщение
Т.к. это будет проблемкой для меня(вью), вот и спросил.
EveKS, покажите модель.

Цитата Сообщение от EveKS Посмотреть сообщение
Как можно, в зависимости от того - сколько ответов, привязать CheckBox или RadioButton.
Зависит от того, как вы хотите отображать вопросы для теста. Т.к. вариантов может быть много.
1. Слева - список всех вопросов, справа - сам вопрос и варианты ответов
2. Отображается только по одному вопросу за раз, следующий будет показан только после ответа на текущий.
...
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
25.09.2016, 21:21
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
покажите модель.
Модели там ещё нет. UserControl vs CheckBox or RadioButton Win Form. Хороший случай сделать всё по-человечески
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
27.09.2016, 19:15  [ТС]
ViterAlex, Ev_Hyper, nestquik2,
Сегодня вновь добрался до написания этой программы.
Пример вопросов:"

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>Тема 1
=
Вопрос 1
@Ответ 1
Ответ 2
@Ответ 3
=
Вопрос 2
Ответ 1
Ответ 2
@Ответ 3
=
Вопрос 3
@Ответ 1
Ответ 2
=
Вопрос 4
Ответ 1
@Ответ 2
=
Вопрос 5
@Ответ 1
Ответ 2
@Ответ 3
@Ответ 4
Ответ 5
Ответ 6
@ помечен правильный ответ

Накидал следующее для xml сериализации.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    [Serializable]
    [XmlRoot("TestXML")]
    public class Testings
    {
        [XmlElement("head")]
        public string Head { get; set; }
        [XmlArray("questions")]
        [XmlArrayItem("question")]
        public List<Questions> Questions { get; set; }
    }
    [Serializable]
    [XmlRoot("questions")]
    public class Questions
    {
        [XmlElement("question")]
        public string Question { get; set; }
        [XmlArray("answers")]
        [XmlArrayItem("answer")]
        public List<Answers> Answers { get; set; }
 
 
    }
    [Serializable]
    [XmlRoot("answers")]
    public class Answers
    {
        [XmlElement("answer")]
        public Answer Answer { get; set; }
    }
    [Serializable]
    public class Answer
    {
        [XmlText]
        public string Value { get; set; }
 
        [XmlAttribute]
        public string IsRight { get; set; }
    }
Создал Xml:
Как:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
static void Main(string[] args)
{
    var str = File.ReadAllText(@"E:\test\Testing.txt", Encoding.Default);
    var vrt = str.Split(new[] { '>' }, StringSplitOptions.RemoveEmptyEntries)
        .Select((s, i) =>
        {
            var a1 = s.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
            return new Testings
            {
                Head = a1.First(),
                Questions = a1.Skip(1)
                    .Select(t =>
                    {
                        var a2 = t.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Skip(1);
                        return new Questions
                        {
                            Question = a2.First(),
                            Answers = a2.Skip(1)
                                .Select(r =>
                                  new Answers
                                  {
                                      Answer = new Answer
                                      {
                                          Value = r.Replace("@", ""),
                                          IsRight = r.Contains("@") ? "Yes" : "No"
                                      }
                                  }).ToList()
                        };
                    }).ToList()
            };
        }).ToArray();
 
    XmlSerializer formatter = new XmlSerializer(typeof(Testings[]));
 
    using (FileStream fs =
        new FileStream(@"E:\test.xml", FileMode.OpenOrCreate))
    {
        formatter.Serialize(fs, vrt);
    }
}

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?xml version="1.0"?>
<ArrayOfTestings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Testings>
    <head>Тема 1
</head>
    <questions>
      <question>
        <question>Вопрос 1
</question>
        <answers>
          <answer>
            <answer IsRight="Yes">Ответ 1
</answer>
          </answer>
          <answer>
            <answer IsRight="No">Ответ 2
</answer>
          </answer>
          <answer>
            <answer IsRight="Yes">Ответ 3
</answer>
          </answer>
        </answers>
      </question>
      <question>
        <question>Вопрос 2
</question>
        <answers>
          <answer>
            <answer IsRight="No">Ответ 1
</answer>
          </answer>
          <answer>
            <answer IsRight="No">Ответ 2
</answer>
          </answer>
          <answer>
            <answer IsRight="Yes">Ответ 3
</answer>
          </answer>
        </answers>
      </question>
      <question>
        <question>Вопрос 3
</question>
        <answers>
          <answer>
            <answer IsRight="Yes">Ответ 1
</answer>
          </answer>
          <answer>
            <answer IsRight="No">Ответ 2
</answer>
          </answer>
        </answers>
      </question>
      <question>
        <question>Вопрос 4
</question>
        <answers>
          <answer>
            <answer IsRight="No">Ответ 1
</answer>
          </answer>
          <answer>
            <answer IsRight="Yes">Ответ 2
</answer>
          </answer>
        </answers>
      </question>
      <question>
        <question>Вопрос 5
</question>
        <answers>
          <answer>
            <answer IsRight="Yes">Ответ 1
</answer>
          </answer>
          <answer>
            <answer IsRight="No">Ответ 2
</answer>
          </answer>
          <answer>
            <answer IsRight="Yes">Ответ 3
</answer>
          </answer>
          <answer>
            <answer IsRight="Yes">Ответ 4
</answer>
          </answer>
          <answer>
            <answer IsRight="No">Ответ 5
</answer>
          </answer>
          <answer>
            <answer IsRight="No">Ответ 6</answer>
          </answer>
        </answers>
      </question>
    </questions>
  </Testings>
</ArrayOfTestings>
Как будет подоваться - тема и список вопросов+ответы в одной "страничке".
Хотелось бы совета, как лучше это сделать, и сойдет-ли то, как я это начал. Мне не нравится вариант Класс>список класс>список>класс...
0
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
27.09.2016, 21:06
Цитата Сообщение от EveKS Посмотреть сообщение
Мне не нравится вариант Класс>список класс>список>класс...
Тут можно обойтись без этого:
Цитата Сообщение от EveKS Посмотреть сообщение
C#
1
2
3
4
5
6
7
[Serializable]
[XmlRoot("answers")]
public class Answers
{
    [XmlElement("answer")]
    public Answer Answer { get; set; }
}
1
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
27.09.2016, 23:34
Лучший ответ Сообщение было отмечено EveKS как решение

Решение

Цитата Сообщение от EveKS Посмотреть сообщение
Мне не нравится вариант Класс>список класс>список>класс...
Можно немного проще по структуре с тем же результатом:
Тест
C#
1
2
3
4
5
6
7
8
9
10
11
[XmlType(AnonymousType = true)]
[XmlRoot("testing", Namespace = "", IsNullable = false)]
public class Testing
{
        
    [XmlElement("question")]
    public List<Question> Questions { get; set; }
        
    [XmlAttribute]
    public string Title { get; set; }
}

Вопрос
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[XmlType(AnonymousType = true)]
public class Question
{
 
    [XmlElement("answer")]
    public List<Answer> Answers { get; set; }
 
    [XmlAttribute("number")]
    public int Number { get; set; }
 
    [XmlAttribute("text")]
    public string Text { get; set; }
}

Ответ
C#
1
2
3
4
5
6
7
8
9
10
[XmlType(AnonymousType = true)]
public class Answer
{
            
    [XmlAttribute]
    public bool IsRight { get; set; }
            
    [XmlText]
    public string Value { get; set; }
}

Получится такой XML
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<testing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Title="Название теста">
  <question number="1" text="Формулировка вопроса">
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
  </question>
  <question number="2" text="Формулировка вопроса">
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
  </question>
  <question number="3" text="Формулировка вопроса">
    <answer IsRight="true">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
  </question>
  <question number="4" text="Формулировка вопроса">
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="false">Вариант ответа</answer>
    <answer IsRight="true">Вариант ответа</answer>
  </question>
</testing>
Дальше нужно писать контрол, который будет на вход принимать класс Question и в зависимости от количества правильных ответов генерировать CheckBox или RadioButton. Но я бы добавил ещё в класс Question флаг IsMultiAnswer, указывающий на возможность множественных ответов. Это упростит логику контрола.
1
 Аватар для Sigin
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
27.09.2016, 23:37
Цитата Сообщение от ViterAlex Посмотреть сообщение
в класс Question флаг IsMultiAnswer
Но при этом его не обязательно добавлять в XML схему, достаточно просто сделать get-only свойство, которое возвращает True, если в Answers больше чем 1 IsRight=true.
1
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
28.09.2016, 07:04
Цитата Сообщение от nestquik2 Посмотреть сообщение
Но при этом его не обязательно добавлять в XML схему, достаточно просто сделать get-only свойство, которое возвращает True, если в Answers больше чем 1 IsRight=true.
Строго говоря, это не совсем так. Можно предложить выбрать несколько ответов при одном правильном.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2016, 07:04
Помогаю со студенческими работами здесь

CheckBox и RadioButton
Дана целочисленная квадратная матрица размером n.Найти средние значения элементов по столбцам или строкам для отрицательных,положительных...

RadioButton + CheckBox
на форме в процессе выполнения проги появляется несколько контролов (пользователь сам задает число таковых) это все легко, но затык в том...

Checkbox и RadioButton
Как изменить размеры стандартных компонентов Checkbox и RadioButton?

Wpf control в usercontrol
Здравствуйте! Я создал UserControl типа такого: &lt;UserControl x:Class=&quot;WpfTest.TestMenu&quot; ...

PropertyChangedEventHandler и UserControl в WPF
Добрый день! По мере возможности изучаю WPF, столкнулся с проблемой. Есть у меня простенькое приложение для работы с БД, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru