Как добавить разделитель в поле со списком WPF, привязанное к данным?

Есть ли способ добавить разделитель в поле со списком WPF, привязанное к данным? т.е. в моем xaml поле со списком ItemsSource="{Binding TheList}". Список представляет собой наблюдаемую коллекцию объектов, один из которых я хочу отделить от остальных. Этот список также генерируется из sql, поэтому он не жестко запрограммирован или что-то в этом роде. Я бы тоже не хотел, чтобы можно было выбрать Seaprator. Спасибо!


person Theodosius Von Richthofen    schedule 09.08.2013    source источник
comment
Что вы пытались сделать до сих пор, чтобы добиться этого?   -  person yo chauhan    schedule 09.08.2013


Ответы (5)


Проверьте это решение. Он использует Style для изменения Template определенных ComboBoxItem объектов.

person bouvierr    schedule 09.08.2013

Я создавал свое поле со списком в файле .cs динамически и без использования привязок, но я считаю, что это может вам помочь. Разделители нельзя щелкнуть и выбрать.

ComboBox frameColor = new ComboBox()
{
    Width = 200,
    Margin = new Thickness(180, -780, 0, 0),
    VerticalAlignment = VerticalAlignment.Center,
    IsEditable = false,
    Items =
    {
        new ComboBoxItem(){...},
        new Separator(),
        new ComboBoxItem(){...},
        new ComboBoxItem(){...},
        new ComboBoxItem(){...},
        new Separator(),
        new ComboBoxItem(){...},
        new ComboBoxItem(){...},
        new ComboBoxItem(){...},
        new ComboBoxItem(){...},
        new ComboBoxItem(){...},
    }

Вот результат:
Поле со списком с разделителями

person The Ashen Wolf    schedule 17.05.2021

Хотя мой ComboxBox (на данный момент) не DataBound, я добился концепции разделителя, добавив к элементу нижнюю границу. В этом примере две строки до и две строки после разделителя.

<ComboBox x:Name="Cbx" SelectionChanged="Cbx_SelectionChanged">
  <ComboBoxItem Content="select one..." Foreground="DarkGray" IsSelected="True" /
  <ComboBoxItem Content="ABC" />
  <ComboBoxItem Content="DEF" />
  <ComboBoxItem Content="GHI" BorderBrush="Black" BorderThickness="0,0,0,2" />
  <ComboBoxItem Content="KLM" />
  <ComboBoxItem Content="NOP" />
</ComboBox>
person nrod    schedule 17.01.2020

вам нужно использовать ComboBox.ItemTemplate, чтобы нарисовать ваши itens

http://www.silverlightshow.net/items/Silverlight-ComboBox.aspx

person rodolfoprado    schedule 09.08.2013
comment
это ничего не говорит о разделителе - person Theodosius Von Richthofen; 12.08.2013
comment
Не могли бы вы обновить ссылку, потому что она не работает? - person marbel82; 09.10.2019

Если вы хотите сделать то же самое в коде С#:

Cbx.Items.Add("ABC");
Cbx.Items.Add("DEF");
ComboBoxItem item = new ComboBoxItem();
item.Content = "GHI";
item.BorderBrush = Brushes.Black;
item.BorderThickness = new Thickness(0, 0, 0, 2);
Cbx.Items.Add(item);
Cbx.Items.Add("KLM");
Cbx.Items.Add("NOP");
person TorATB    schedule 30.05.2020