Скрытие выделения в ListBox WPF с сохранением его в элементах управления

Я использую ListBox для отображения списка редактируемых объектов, шаблон которых, среди прочего, содержит ComboBox.

Я использовал эту общую технику, чтобы скрыть выбор ListBox, который ни для чего не используется:

<ListBox.Resources>
  <Style TargetType="ListBoxItem">
    <Style.Resources>
      <Brush x:Key="{x:Static SystemColors.HighlightBrushKey}">Transparent</Brush>
      <Brush x:Key="{x:Static SystemColors.ControlBrushKey}">Transparent</Brush>

Проблема в том, что это портит выпадающий список ComboBox.

Я хотел бы переопределить эти ресурсы снова в моем шаблоне, указав исходные значения (SystemColors.HighlightBrushи т. д.) вместо их жесткого кодирования. Как я могу это сделать?

<ListBox.ItemTemplate>
  <DataTemplate DataType="{x:Type SearchService:Criterion}">
    <DataTemplate.Resources>
      <!--I know how to specify a hardcoded brush here,
          but not how to reference one from SystemColors-->

2 ответа

Решение

Я использовал эту общую технику, чтобы скрыть выбор ListBox, который не используется ни для чего

Если вы не используете выбор для чего-либо, вы должны просто использовать ItemsControl вместо.

Вы могли бы сделать:

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
    Color="{x:Static SystemColors.HighlightColor}" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
    Color="{x:Static SystemColors.ControlColor}" />

или же

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
    Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
    Color="{DynamicResource {x:Static SystemColors.ControlColorKey}}" />

Чтобы восстановить кисти по умолчанию.

Другие вопросы по тегам