如何向数据绑定的 WPF 下拉框添加分隔符?

4

有没有办法在数据绑定的WPF组合框中添加分隔符?也就是说,在我的XAML中,组合框的ItemsSource =“{Binding TheList}”。该列表是一个可观察对象集合,其中一个对象需要与其余对象分开。该列表也是从SQL生成的,因此它不是硬编码的。我也不希望分隔符可选择。谢谢!


1
你目前为止尝试了什么来实现这个? - yo chauhan
6个回答

4

请查看解决方案。它使用Style来更改某些ComboBoxItem对象的Template


3
链接已失效。仅发布链接到其他网站通常不是一个好主意。最好包含源代码。 - Marcel Grüger

3
我在 .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(){...},
    }

这是结果:
带分隔符的下拉框

1
尽管我的 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>

1
XAML只是每个项目的解决方案。如果项目列表始终相同,您可能可以根据ItemsControl AlternationCount添加触发器。
这是结果。 enter image description here
<ComboBox.ItemContainerStyle>
  <Style TargetType="ComboBoxItem">
    <Setter Property="BorderBrush" Value="DarkGray" />
    <Setter Property="BorderThickness" Value="0,1,0,0" />
  </Style>
</ComboBox.ItemContainerStyle>

0

这并没有提到分隔符。 - Theodosius Von Richthofen
2
你能否更新链接,因为它无法使用? - marbel82

0
如果你想在C#代码中做同样的事情:
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");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接