Combobox ItemTemplate и передний план - PullRequest
       27

Combobox ItemTemplate и передний план

3 голосов
/ 16 сентября 2011

У меня есть comboBox, который связан со списком строк из моей viewModel.То, что я пытаюсь сделать, это установить для переднего плана элемента comboBox другой цвет, если свойство в моей viewModel имеет значение true:

<ComboBox x:Name="myComboBox" ItemsSource="{Binding Names}">
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding ...}">
        <TextBlock.Style>
          <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
              <DataTrigger Binding="{Binding IsActive}" Value="True">
                <Setter Property="Foreground" Value="Navy"/>
              </DataTrigger>
            </Style.Triggers>
          </Style>
        </TextBlock.Style>
      </TextBlock>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

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

Правильный ли я подход?Будет ли ComboBox.ItemTemplate правильно смотреть на мою viewModel (которая является контекстом данных) при поиске IsActive или эта привязка также некорректна?

1 Ответ

1 голос
/ 16 сентября 2011

DataContext для каждого ComboBoxItem является строкой, поэтому

  • Для TextBlock, привязка к DataContext, как Text="{Binding}
  • Чтобы DataTrigger смог найти IsActive, используйте RelativeSource в привязке

    <ComboBox x:Name="myComboBox" ItemsSource="{Binding Names}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}">
                    <TextBlock.Style>
                        <Style TargetType="{x:Type TextBlock}">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}},
                                                               Path=DataContext.IsActive}"
                                             Value="True">
                                    <Setter Property="Foreground" Value="Navy"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
    
...