我是WPF的新手。仅当分组等于"搜索结果"时,我才尝试在ListBox
项目上显示ToolTip
。我收到一个错误,说:
"在类型'框架元素'中找不到属性'内容'。
谁能告诉我下面的代码有什么问题?
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=code}">
<TextBlock.ToolTip>
<ToolTip>
<ToolTip.Triggers>
<DataTrigger Binding="{Binding Path=grouping}" Value="Search Results">
<Setter Property="Content" Value="{Binding Path=grouping}"/>
</DataTrigger>
</ToolTip.Triggers>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如果没有像下面的代码这样的触发器,它可以正常工作,所以它让我感到困惑,为什么它说找不到该属性。
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=code}">
<TextBlock.ToolTip>
<ToolTip Content="{Binding Path=grouping}" />
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
FrameworkElement
的Triggers
集合仅用于事件触发器,不适用于DataTrigger
或PropertyTriggers
。为包含DataTrigger
的ToolTip
定义样式:
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=code}">
<TextBlock.ToolTip>
<ToolTip>
<Tooltip.Style>
<Style TargetType="ToolTip">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=grouping}" Value="Search Results">
<Setter Property="Content" Value="{Binding Path=grouping}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ToolTip.Style>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
MSDN 说:
请注意,仅在元素上建立的触发器集合 支持事件触发器,而不是属性触发器(触发器)。如果您需要 属性触发器,您必须将它们放置在样式或模板中,并且 然后将该样式或模板直接分配给元素 通过 Style 属性,或间接通过隐式样式 参考。
这不会直接描述您的问题,而是将其解读为:在样式中设置触发器。
本文更具体:WPF 博士博客
FrameworkElement 上还有一个触发器集合,但它可以 仅包含事件触发器...不是属性或数据触发器。