WPF - 多绑定的工具提示

8
我想在文本块中使用多绑定来创建工具提示,但是无论我尝试什么方法都不起作用。
以下是我尝试过的内容:
<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。
如果我不使用tooltipservice,只使用tooltip,像这样:
<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>

屏幕卡住了。
3个回答

5

我不知道您使用的是哪个版本的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()的代码? - Ouarzy

1
我尝试了以下代码,完美地运行了:
<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。 - Golan Kiviti
@Pachu,你能给我展示一下代码吗?我认为你需要在你的类中实现重写tostring()方法。 - Dhruv Panchal
@Pachu,你有办法实现多绑定工具提示的方式吗? - Dhruv Panchal

0

只需删除空括号即可。下面的代码将按预期工作:

<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解析器要求您使用一对大括号{}进行转义。否则,解析器会因为大括号也用于标记扩展的语法而感到困惑。

详细信息请参阅XAML文档中的{} 转义序列/标记扩展

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


@Pachu 好的,我已经回答了你关于括号的问题并添加了整个工作代码。在使用后,你还有什么问题吗? - Vadim Martynov
我在工具提示中看到了“System.Windows.Controls.TextBlock”的文本,而不是我想要的文本。 - Golan Kiviti
抱歉,我无法重现您的问题。我删除了空括号,现在代码可以正常工作了。您使用的 .net 框架版本是多少?您的示例是否属于样式/模板的一部分? - Vadim Martynov
.NET 4.5,是数据模板的一部分。 - Golan Kiviti
我的猜测是你的工具提示实际上绑定了"System.Windows.Controls.TextBlock"。 你的代码后台如何填充Description、FirstDescription和SecondDescription? - Ouarzy
此外,您不能直接绑定数据模板内的视图模型。请参见SO了解更多信息。 - Vadim Martynov

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