如何将常规文本附加到已经绑定到其文本属性的TextBlock上

本文关键字:文本 绑定 属性 TextBlock 常规 | 更新日期: 2023-09-27 17:49:33

我有一个TextBlock:

<TextBlock x:Name="someText" Text="{Binding ElementName=theList, Path=SelectedItem.Name, Mode=TwoWay}" />

如您所见,它被绑定到另一个元素的选中项。现在,让我们假设,例如,选中的项目显示"Hello,"。我想把我的名字附加到它后面(在XAML中,而不是在代码后面),这样它读起来就像:"Hello, Arrow。"我该怎么做呢?

如何将常规文本附加到已经绑定到其文本属性的TextBlock上

试试这个:

<TextBlock x:Name="someText" TextWrapping="NoWrap">             
   <Run Text="{Binding ElementName=theList, Path=SelectedItem, Mode=TwoWay}" />
   <Run Text=" Arrow." />
</TextBlock>

XAML解决方案尚不支持Metro XAML:

可以使用StringFormat:

<TextBlock x:Name="someText" Text="{Binding ElementName=theList, Path=SelectedItem, Mode=TwoWay, StringFormat={}{0} Arrow.}" />

也可以使用MultiBinding和StringFormat:

<TextBlock>
     <TextBlock.Text>
          <MultiBinding StringFormat="{}{0} Arrow.">
               <Binding ElementName="theList" Path="SelectedItem.Name" />                    
          </MultiBinding>
     </TextBlock.Text>
</TextBlock>

使用这种配置,您唯一可以做的就是将该文本放入所选项中。所以,我的建议是这样的:

<StackPanel Orientation="Horizontal">
    <TextBlock x:Name="someText"
        Text="{Binding ElementName=theList,
                       Path=SelectedItem.Name,
                       Mode=TwoWay}" />
    <TextBlock x:Name="suffixText"/>
</StackPanel>

有了这个配置,你可以以任何你想要的方式提供suffixText并得到你想要的结果。

您需要为此创建一个MultiValueConverter,它连接两个字符串。您可以将这些字符串从xaml传递给转换器。更多细节见文章