Как установить всплывающую подсказку WPF ComboBox на основе выбранного значения?

у меня есть ComboBox в моем приложении WPF. Используя код ниже, я могу установить ToolTip как выбранное значение:

ToolTip="{Binding Path=SelectedValue, RelativeSource={RelativeSource Self}}" 

но если мне нужно установить отдельное значение для ToolTip на основе ComboBox выбор, следующий код не работает:

<controls:ComboBoxEx.Style>
    <Style TargetType="ComboBox" BasedOn="{StaticResource basicStyle}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=SelectedValue, RelativeSource={RelativeSource Self}}" Value="DAW">
                <Setter Property="ToolTip" Value="abc"/>
            </DataTrigger>

            <DataTrigger Binding="{Binding Path=SelectedValue, RelativeSource={RelativeSource Self}}" Value="generic">
                <Setter Property="ToolTip" Value="def"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</controls:ComboBoxEx.Style>

2 ответов


Я не уверен, правильно ли я понимаю, но если вы используете Style вы не должны использовать DataTrigger или RelativeSource={RelativeSource Self}}" получить доступ к SelectedValue, вы должны иметь доступ через Trigger С помощью Property

<Style TargetType="ComboBox">
    <Style.Triggers>
        <Trigger Property="SelectedValue"  Value="DAW">
            <Setter Property="ToolTip" Value="abc"/>
        </Trigger>
        <Trigger Property="SelectedValue" Value="generic">
            <Setter Property="ToolTip" Value="def"/>
        </Trigger>
    </Style.Triggers>
</Style>

привязать подсказку к свойству отображения выбранного элемента в этом случае у меня есть отображение имени свойства, если у вас есть декларативные элементы ComboBox, то это будет

ToolTip="{Binding Path=SelectedItem.Content,ElementName=cmbbox_years}"

Else для пользовательского объекта ниже кода будет работать

<ComboBox 
  Name="cmbbox_years" 
  DisplayMemberPath="display" 
  SelectedValuePath="value"
  ItemsSource="{Binding Years}" 
  SelectedItem="{Binding YearSelectedItem}" 
  ToolTip="{Binding Path=SelectedItem.display,ElementName=cmbbox_years}"/>