Изменение цвета фона сепаратора в поле Связанные данные WPF

StackOverflow https://stackoverflow.com/questions/4267822

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть Combobox, который связан с набором набора данных, который затем использует DataTrigger для вставки сепаратора, когда он сталкивается с «-» в данных (пример В этом вопросе).

Фон меню имеет пользовательский цвет, установленный с помощью словаря ресурсов. Цвет в этом случае - # FFF8F4C5

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

white background on separator

Если я установил фон сепаратора, он фактически меняет темную линию на любой цвет. Кажется, я не могу найти, как изменить белую область, чтобы соответствовать тому же цвету, что и меню.

Это было полезно?

Решение

В ControlTemplate приложите сепаратор в границе с предпосылкой, связанной с предпосылкой родительской комбинации. Что-то вроде этого:

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

Другие советы

Используйте стиль сепаратора:

<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"/>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top