2010-11-24 3 views
2

У меня есть выпадающий, который привязан к набору данных, который затем использует DataTrigger, чтобы вставить разделитель, когда он сталкивается с «-». В данных (пример in this question)Изменение цвета фона разделителя в WPF данных связаны со списком

фон меню имеет собственный цвет, установленный с использованием словаря ресурсов. цвет в данном случае # FFF8F4C5

Если добавить разделитель к не DataBound простому со списком, он выглядит правильно. Но при добавлении он использует datatrigger, он не похож на остальное меню, как вы можете видеть ниже (он имеет белый фон).

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

На самом деле это происходит главным образом потому, что у Separator, по-видимому, есть маржа по умолчанию, которая не равна нулю. Таким образом, без рамки будет отображаться цвет фона для всплывающего меню. (На самом деле, если вы просто установите маркер разделителя на ноль, вы также не увидите белый фон. Хотя промежуток между элементами может немного отличаться). Помещение границы эффективно «скроет» фон всплывающего меню. Надеюсь, это имеет смысл. – 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"/> 

Это должно сделать это

Смежные вопросы