【问题标题】:WPF - ToolTip with multibindingWPF - 具有多重绑定的工具提示
【发布时间】:2016-04-03 03:39:39
【问题描述】:

我想在文本块内创建一个带有多重绑定的工具提示,但无论我尝试什么都行不通。

这是我迄今为止尝试过的:

<TextBlock Text="{Binding Description, StringFormat='Description : {0}{}'}">
    <ToolTipService.ToolTip>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding StringFormat="Description : {0}{1}{}">
                    <Binding Path="FirstDescription" />
                    <Binding Path="SecondDescription" />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </ToolTipService.ToolTip>
</TextBlock>

但是当我尝试它时,我在工具提示上看到的是:System.Windows.Controls.TextBlock。

当我在没有工具提示服务的情况下尝试它时,只有工具提示,像这样:

<TextBlock Text="{Binding Description, StringFormat='Description : {0}{}'}">
    <ToolTip>
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding StringFormat="Description : {0}{1}{}">
                    <Binding Path="FirstDescription" />
                    <Binding Path="SecondDescription" />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </ToolTip>
</TextBlock>

屏幕卡住了。

【问题讨论】:

    标签: c# wpf tooltip multibinding


    【解决方案1】:

    我不知道您使用的是哪个 VS 版本,但是:

    <TextBlock Text="{Binding Description, StringFormat="Description : {0}{}"}">
    

    甚至不为我编译。

    只需像这样删除 " 和空括号:

    <TextBlock Text="{Binding Description, StringFormat=Description : {0}">
    

    如果你想要 ":

    ,你也可以这样写
    <TextBlock>
        <TextBlock.Text>
            <Binding Path="Description" StringFormat="Description : {0}" />
        </TextBlock.Text>
        <ToolTipService.ToolTip>
            <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="Description : {0}{1}">
                                <Binding Path="FirstDescription" />
                                <Binding Path="SecondDescription" />
                            </MultiBinding>
                        </TextBlock.Text>
            </TextBlock>
        </ToolTipService.ToolTip>
    </TextBlock>
    

    【讨论】:

    • 请同时删除空括号,以防万一。然后正如我所说,您可能在如何填写绑定时遇到问题,它应该可以工作。它显示“System.Windows.Controls.TextBlock”可能意味着您在后面的代码中编写了类似 Description = new TextBlock() 的代码?
    【解决方案2】:

    我已经尝试了以下代码并且效果很好:

    <TextBlock Margin="20" Foreground="Black" FontSize="20" FontFamily="Century Gothic" Text="{Binding Name1}">
            <TextBlock.ToolTip>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="MultiBinded Tooltip : {0}{1}">
                            <Binding Path="Name1"/>
                            <Binding Path="Name2"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </TextBlock.ToolTip>
        </TextBlock>
    

    【讨论】:

    • 我试过了,但我在工具提示中只能看到:System.Windows.Controls.TextBlock
    • @Pachu 你能告诉我代码吗?我认为你需要在你的类中实现覆盖 tostring() 方法。
    • @Pachu 你有多重绑定工具提示的方法吗?
    【解决方案3】:

    只需删除空括号。下一个代码按预期工作:

    <TextBlock Text="{Binding Description, StringFormat='Description : {0}'}">
        <ToolTipService.ToolTip>
            <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="Description : {0}{1}">
                                <Binding Path="FirstDescription" />
                                <Binding Path="SecondDescription" />
                            </MultiBinding>
                        </TextBlock.Text>
            </TextBlock>
        </ToolTipService.ToolTip>
    </TextBlock>
    

    如果 StringFormat 以左大括号 { 开头,XAML 解析器要求您使用一对大括号 {} 对其进行转义。否则解析器会感到困惑,因为大括号也用于标记扩展的语法中。

    详细信息可在 {} Escape Sequence / Markup Extension 的 XAML 文档中找到。

    此外,内联绑定不能使用双引号,但可以使用单引号。

    【讨论】:

    • @Pachu 好的,我回答了你关于括号的问题并添加了整个 workong 代码。使用后还有问题吗?
    • 我愿意,我在工具提示中看到以下文本:“System.Windows.Controls.TextBlock”而不是我想要的文本。
    • 抱歉,我无法重现您的问题。我删除了空括号,现在代码可以正常工作。您使用什么版本的 .net 框架?您的示例是否是样式/模板的一部分?
    • .net 4.5,是的,它是数据模板的一部分
    • 我的猜测是“System.Windows.Controls.TextBlock”是实际绑定在您的工具提示中的内容。填写Description、FirstDescription和SecondDescription的代码是什么?
    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多