2010-11-24 60 views
2

我有一个绑定到数据集的组合框,然后使用数据触发器在数据中遇到' - '时插入分隔符(例如in this question)更改WPF数据绑定组合框中分隔符的背景颜色

菜单的背景有自定义颜色,通过使用资源字典中设置。在这种情况下,颜色为#FFF8F4C5

如果我添加一个分隔符到非数据绑定的简单组合框,似乎正确。但是当添加它使用数据触发器,它看起来不像菜单的其余部分,如下所示(它有一个白色背景)。

white background on separator

如果我设置了分隔符的背景,它实际上会将较暗的线条更改为任何颜色。我似乎无法找到如何更改白色区域以匹配与菜单相同的颜色。

回答

2

在ControlTemplate中,将分隔符放在背景绑定到父级ComboBoxItem的背景的边框中。事情是这样的:

<ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
    <Border Background="{TemplateBinding Background}"> 
     <Separator HorizontalAlignment="Stretch" IsEnabled="False"/> 
    </Border> 
</ControlTemplate> 
+0

添加边框工作。为什么是这样? – jmlumpkin 2010-11-24 16:43:17

+1

其实它主要是因为分隔符显然有一个不为零的默认边距。因此,如果没有边框,弹出式菜单的背景颜色将会显示。 (实际上,如果您只将分隔符的边距设置为零,您也不会看到白色背景,尽管项目之间的间距可能稍微偏离)。放置边框将有效地“隐藏”弹出式菜单的背景。希望这是有道理的。 – ASanch 2010-11-24 17:24:57

1

使用分离式的:

<Style x:Key="SeparatorStyle1" TargetType="{x:Type Separator}"> 
    <Setter Property="Background" Value="{DynamicResource 
     {x:Static SystemColors.ControlDarkBrushKey}}"/> 
    <Setter Property="Margin" Value="0,2,0,2"/> 
    <Setter Property="Focusable" Value="false"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Separator}"> 
       <Border Height="1" SnapsToDevicePixels="true" 
       Background="#FFCCD480" BorderBrush="#FF633A3A" BorderThickness="0,0,0,1"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

,并使用它像这样

<ComboBox Background="#FFD2D2B5"> 
    <ListBoxItem Content="item1"/> 
    <ListBoxItem Content="item2"/> 
    <Separator Style="{DynamicResource SeparatorStyle1}"/> 
    <ListBoxItem Content="item3"/> 

应该这样做

相关问题