如何在WPF中将多个字段绑定到一个TextBlock?

3
这是我的当前代码:
<StackPanel Grid.Column="4" Grid.Row="1">
    <TextBlock Text="{Binding Strain}"  />
    <TextBlock Text="/"  />
    <TextBlock Text="{Binding MaximumStrain}"  />
</StackPanel>

我想要做的是在一个文本块中使用表达式"{Strain}/{MaximumStrain}"。


P.S. 我并不是真的需要一个 TextBlock。另一个在视觉上相似的控件也可以。 - Jonathan Allen
只是一个快速的想法。可以将其绑定到列表/集合并使用转换器吗? - Carl Rynegardh
很难选出一个赢家。两个答案都有其优点和局限性。 - Jonathan Allen
不错。这个问题现在应该对很多人有用。感谢Jonathan指出每种方法的优缺点 :) - Jai
2个回答

9

你可以使用"运行"命令,尝试以下操作:

    <StackPanel>
        <TextBlock>
            <Run Text="{Binding Strain}"></Run>
            <Run Text="/"></Run>
            <Run Text="{Binding MaximumStrain}"></Run>
        </TextBlock>
    </StackPanel>

优点:可以为每个Run更改字体设置。

为了避免在文本之间添加空白,您只需要将Run命令放在同一行中,像这样:

<Run Text="{Binding Strain}"></Run><Run Text="/"></Run><Run Text="{Binding MaximumStrain}"></Run>

9

使用多绑定和字符串格式。

<TextBlock Grid.Column="4" Grid.Row="1">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}/{1}">
            <Binding Path="Strain" />
            <Binding Path="MaximumStrain" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

优点:对间距有直接控制。

缺点:

  • 无法进行复杂的字体样式设置。
  • 在某些情况下需要使用Mode=OneWay。根据使用情况可能会抛出错误或静默失败。

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