Как сделать выделенный текст красным и жирным на триггере (в выпадающем списке) - PullRequest
0 голосов
/ 14 февраля 2020

Я столкнулся с проблемой: если я выберу элемент из списка и его свойство. IsNotCorrect имеет значение true, тогда выделите этот текст выделенного элемента красным и жирным шрифтом, а все остальные элементы в поле со списком будут черными. Это моя попытка сделать это, но ничего не происходит:

<ComboBox x:Name="REASON_ID" DisplayMemberPath="Name" IsReadOnly="True" IsEditable="True" 
    SelectedItem="{Binding SelectedReason, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">                                                   
    <ComboBox.ItemsSource>                                                        
        <CompositeCollection>
            <ComboBoxItem Content="{DynamicResource lang_Common_SelectItem}"
                          IsEnabled="False"/>
            <CollectionContainer
                 Collection="{Binding Source={StaticResource StaticReasons}}"/>

            <Style TargetType="{x:Type ComboBoxItem}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=SelectedItem.IsNotCorrect, ElementName=REASON_ID}" Value="True">
                        <Setter Property="Foreground" Value="Red" />
                        <Setter Property="FontWeight" Value="Bold" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>

        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox> 

1 Ответ

1 голос
/ 14 февраля 2020

Если вы хотите, чтобы все элементы в выпадающем списке, которые IsNotCorrect были выделены жирным и красным цветом, удалите ваш стиль из отображаемой коллекции и поместите его в ComboBox.Resources. Привязка также должна быть скорректирована:

<ComboBox.Resources>
    <Style TargetType="{x:Type ComboBoxItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsNotCorrect}" Value="True">
                <Setter Property="Foreground" Value="Red" />
                <Setter Property="FontWeight" Value="Bold" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ComboBox.Resources>

Если вы хотите изменить представление в текстовом поле, то вам нужно изменить ControlTemplate из ComboBox.

  • скопировать ControlTemplate по умолчанию ComboBox см. Стили и шаблоны ComboBox , например, в Resources элемента, который содержит ваш ComboBox.
  • Изменить <Style x:Key="{x:Type ComboBox}" до <Style x:Key="UsrDefinedStyle" в скопированном коде.
  • Найдите TextBox с именами PART_EditableTextBox и , удалите Style="{x:Null}" в скопированном коде.
  • Установите стиль вашего ComboBox на Style="{StaticResource UsrDefinedStyle}"
  • Установите на Resources вашего ComboBox:

    <Style TargetType="{x:Type TextBox}" BasedOn="{x:Null}">
       <Style.Triggers>
          <DataTrigger Binding="{Binding SelectedItem.IsNotCorrect, RelativeSource={RelativeSource AncestorType=ComboBox}}" Value="True">
              <Setter Property="Foreground" Value="Red" />
              <Setter Property="FontWeight" Value="Bold" />
          </DataTrigger>
       </Style.Triggers>
    </Style>
    
...