Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Множественный выбор ComboBox (multiselect) / 7 сообщений из 7, страница 1 из 1
22.04.2011, 07:52
    #37227874
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
В сильверлайте нет комбобокса с множественным выбором элементов.
Зато в интернете есть примеры как это можно сделать.
Самый простой путь это через переопределение дефолтного ControlTemplate.
Нашел этот пример, он работает через переопределение стандартного шаблона. Но работает только под sl3, а после перенаправления под sl4 перестает.
Дело, видимо, в стандартном шаблоне для комбобокса под sl3, который использует
Код: plaintext
1.
2.
3.
4.
                                                <StackPanel
                                                    IsItemsHost="True"
                                                    Height="25"
                                                    Orientation="Horizontal"
                                                    Margin="4,0,0,0" />
А sl4 выставить свойство IsItemsHost для Panel отказывается, выдает ошибку 2542.
Я поправил тот пример под дефолтный шаблон sl4 и у меня все заработало.



SL 4.0, VS 2010.
...
Рейтинг: 0 / 0
22.04.2011, 12:18
    #37228378
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
enigmatic,

А привязку к чекбоксам как делать? Достаточно было переопределить ItemTemplate.
...
Рейтинг: 0 / 0
26.04.2011, 07:35
    #37232901
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
Руки-крюки,

Насчет привязки к чекбоксам не совсем понял.
Если имелось в виду то, что сейчас идет привязка итемссурс и в ней ищутся свойства IsSelected и Name. Т.е. неявно.
То да, но иначе никак, т.к. свойства должны привязываться попарно для каждого объекта. А привязка отдельно к чекбоксам не имеет смысла.

Насчет itemtemplate.
Переместил в ItemTemplate, но получилось что-то не то. Появились рамки итемов листбокса вокруг чекбоксов.
...
Рейтинг: 0 / 0
26.04.2011, 12:51
    #37233538
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
enigmatic,

Что за рамки? Покажите скрин.

Грамотный подход - это переопределять ItemTemplate и туда помещать чекбокс. Можно еще при этом допилить Template, если появляются какие-то изъяны.
...
Рейтинг: 0 / 0
26.04.2011, 15:16
    #37233949
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
Руки-крюки,

Получилось нечто такое. Этот вариант лучше, потому что свойства для биндинга задаются тут в замле, а не где-то жестко в стиле.
Постарался следовать вашим словам.

Насчет рамочек.
Скрин:


Использование:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        <ComboBox ItemsSource="{Binding}"
                  x:Name="combo1"
                  HorizontalAlignment="Left"
                  Margin="12,12,0,0"
                  VerticalAlignment="Top"
                  Width="200">
            <!--Style="{StaticResource ComboBoxStyle1}"-->
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox ClickMode="Press"
                                Content="{Binding Path=Name}"
                                IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" />
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

Тестовый проект прилагаю.

PS. Не особо хорошо чувствую разницу между дата/контрол темплейтами.

Спасибо.
...
Рейтинг: 0 / 0
26.04.2011, 16:05
    #37234100
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
enigmatic,

Обычно свойство Template (тип ControlTemplate) это морда (шаблон) всего контролса. Переопределяя его, вы перестраиваете все отображение контролса, при этом поведение остается тем-же. ItemTemplate (тип DataTemplete) это шаблон для данных, которые контролс хостит внутри себя.

Да в WPF нет ComboCheckBox'а, но в этом и вся суть WPF. Если вам нужен ComboCheckBox, то вы берете обычный CheckBox и крутите у него ItemTemplate. Можно хоть "ComboCheckImageBox" сделать.

По поводу рамок, надо взять стандартный Template CheckBox'а и убрать оттуда рамки. Тут уж ничего не поделаешь.
...
Рейтинг: 0 / 0
26.04.2011, 16:57
    #37234274
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественный выбор ComboBox (multiselect)
Руки-крюкиберете обычный CheckBox и крутите у него ItemTemplate.

ComboBox...
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Множественный выбор ComboBox (multiselect) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]