2010-11-24 95 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"/> 

應該這樣做

相關問題