如何根据所选值设置WPF ComboBox的工具提示?

9

我在我的WPF应用程序中有一个ComboBox(组合框)。使用下面的代码,我可以将ToolTip(提示工具)设置为所选值:

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

但是,如果我需要根据ComboBox的选择设置单独的ToolTip值,则以下代码不起作用:

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

你的ComboBox绑定到了什么?一个字符串列表吗?出于兴趣,尝试使用SelectedItem而不是SelectedValue。 - Matt Hamilton
我都试过了 :( - Relativity
2个回答

6

我不太确定是否理解正确,但如果您正在使用 Style,则不应该使用 DataTriggerRelativeSource={RelativeSource Self}} 来访问 SelectedValue,您应该能够通过使用 PropertyTrigger 中进行访问。

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

我尝试了这个...但是没有起作用...如果我将以下setter设置为默认值<Setter Property="ToolTip" Value="{Binding Path=SelectedValue, RelativeSource={RelativeSource Self}}"/>..每当我选择DAW和通用时,它会给我正确的值...但在<trigger>中它不起作用。 - Relativity
你的ComboBox上是否设置了SelectedvaluePath? - sa_ddam213
组合框中的数据类型是什么?您能发布您的ComboBox xaml以及您的集合示例吗? - sa_ddam213
谢谢您的帮助...我已经解决了...我使用了原始模型对象而不是带有选定值的数据触发器...现在它正常工作。 谢谢。 - Relativity

2

将工具提示绑定到所选项的显示属性上,例如在此示例中,我有一个名为“display”的属性。如果您有声明性的ComboBox项,则应该是

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

对于自定义对象,下面的代码将起作用。
<ComboBox 
  Name="cmbbox_years" 
  DisplayMemberPath="display" 
  SelectedValuePath="value"
  ItemsSource="{Binding Years}" 
  SelectedItem="{Binding YearSelectedItem}" 
  ToolTip="{Binding Path=SelectedItem.display,ElementName=cmbbox_years}"/>

这将适用于单次传递,但它不会随着后续视图模型更改更新ToolTip。请参见https://dev59.com/fWw15IYBdhLWcg3wYawx#7313801。 - wonea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接