Первый элемент ComboBox

258
03 июня 2017, 13:38

Допустим у меня есть некий ComboBox, у которого будет задача не по назначению. Допустим первый элемент этого ComboBox должен быть всегда надпись "Выберите фильтры", при этом остальные элементы из себя представляют CheckBox и TextBox. Как данную затею можно реализовать? Может есть более удобный контрол из стандартных

Answer 1

Если правильно понял вопрос. Можно сделать так:

1) Создаем в ресурсах коллекцию, которая привязана к вашим реальным данным:

<Window.Resources>
    <CollectionViewSource x:Key="MyKey" Source="{Binding Path=MyData}" />
</Window.Resources>

2) Далее у ComboBox в качестве ItemsSource используем CompositeCollection, а так же задаем шаблон для ComboBoxItem. Выглядит это следующим образом:

<ComboBox SelectedIndex="0">
    <ComboBox.ItemsSource>
       <CompositeCollection>
           <ComboBoxItem Content="Выберите фильтры" />
           <CollectionContainer Collection="{Binding Source={StaticResource MyKey}}" />
       </CompositeCollection>
   </ComboBox.ItemsSource>
   <!-- Шаблон для элементов ComboBox -->
   <ComboBox.ItemTemplate>
       <DataTemplate>
           <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}" />
       </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>
Answer 2

Если я вас правильно понял то так :

   <Style x:Key="Filter">
        <Setter Property="Control.FontSize" Value="1"/>
    </Style>

Текст "Выберите фильтры" сделайте минимальным, можно под цвет комбобокса.

    <ComboBox Margin="0,80,0,125" Style="{StaticResource Style}" SelectedIndex="0">
        <ComboBoxItem Content="Выберите фильтры" Style="{StaticResource Filter}">
        </ComboBoxItem>
        <ComboBoxItem>
            <CheckBox Content="Выберите" Width="525"/> <- Ставьте ширину не менее ширины самого бокса и тогда событие `IsSelected` никогда не наступит для элемента комбобокса но наступид для чек бокса 
        </ComboBoxItem>
        <ComboBoxItem>
            <TextBox Text="Текст" Width="525"/>
        </ComboBoxItem>
    </ComboBox>
Answer 3

Combobox вряд ли то что вам нужно. Посмотрите этот вариант:

<Expander Header="Выберите фильтры" Grid.Row="1" Width="135" HorizontalAlignment="Left">
    <ItemsControl ItemsSource="{Binding Filters}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <DockPanel>
                    <CheckBox DockPanel.Dock="Right"/>
                    <TextBlock Text="{Binding Name}" HorizontalAlignment="Center"/>
                </DockPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Expander> 
READ ALSO
Проверить заполнение ListBox C#

Проверить заполнение ListBox C#

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

264
WPF Entity Невозможно добавить запись в таблицу

WPF Entity Невозможно добавить запись в таблицу

Необработанное исключение типа "SystemData

291
Применение string.Empty

Применение string.Empty

Зачем применять stringEmpty, или в чем его отличие от ""? И в том, и в другом случаях результат - пустая строка

213
Преобразовать массивы в объекты js

Преобразовать массивы в объекты js

Возникла проблемаЕсть массив

353