1

我是 WPF 的新手。仅当分组等于“搜索结果”时,我才尝试ToolTip在项目上显示 a 。ListBox我收到一条错误消息:

“在类型‘FrameworkElement’中找不到属性‘内容’。”

谁能告诉我下面的代码有什么问题?

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

1 回答 1

1

Triggers集合FrameworkElement仅适用于事件触发器,不适用于DataTriggers 或PropertyTriggers. 定义一个样式,ToolTip其中包含DataTrigger

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

注意,在一个元素上建立的触发器集合只支持EventTrigger,不支持属性触发器(Trigger)。如果您需要属性触发器,则必须将它们放在样式或模板中,然后直接通过 Style 属性或间接通过隐式样式引用将该样式或模板分配给元素。

这并没有直接描述您的问题,而是将其解读为:在样式中设置触发器。

这篇文章更具体:WPF 博士博客

FrameworkElement 上还有一个 Triggers 集合,但它只能包含事件触发器……而不是属性或数据触发器。

于 2013-10-17T07:49:39.587 回答