使用MultiBinding进行字符串格式化?

34

我正在尝试使用Label控件在XAML中显示一个字符串。以下是我的XAML代码:

<Label Height="28" HorizontalAlignment="Left" Margin="233,68,0,0" Name="label13" VerticalAlignment="Top">
    <Label.Content>
        <MultiBinding StringFormat="{}{0} x {1}">
              <Binding Path="Width" />
              <Binding Path="Height" />
        </MultiBinding>
    </Label.Content>

我的Movie类有两个属性:Width和Height。我想让标签显示为:"Width x Height",例如800 x 640。但标签控件仍然为空。请求帮助。 我希望在不使用转换器的情况下实现这个目标。


我已经修改了XAML,使用TextBlock代替Label。但是它仍然无法显示输出。

<TextBlock Height="28" HorizontalAlignment="Left" Margin="233,68,0,0" Name="label13" VerticalAlignment="Top">
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0} x {1}">
                        <Binding Path="Width" />
                        <Binding Path="Height" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>

1
你看过这个吗?https://dev59.com/IW865IYBdhLWcg3wEKOZ - Paul Matovich
你是否为你的Movie类实现了INotificationChanged接口?你的绑定是否正确?(查看VS输出窗口) - punker76
1个回答

95

您正在尝试将一个字符串绑定到一个对象上。但是StringFormat要求其目标是一个字符串类型。

尝试在标签内容中放置一个TextBlock,并将数据绑定到它上面。

<StackPanel>
  <Slider x:Name="sl1" Minimum="10" Maximum="100"/>
  <Slider x:Name="sl2" Minimum="10" Maximum="100"/>
  <Label x:Name="label13" Background="Yellow" Foreground="Black">
    <Label.Content>
        <TextBlock>
          <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} x {1} Test">
              <Binding ElementName="sl1" Path="Value" />
              <Binding ElementName="sl2" Path="Value" />
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
    </Label.Content>
  </Label>
</StackPanel>

编辑 你的类 Movie 必须实现 INotificationPropertyChanged 接口,你的两个属性必须使用其属性名引发属性更改事件!

希望这有所帮助。


1
你能详细解释一下为什么当TextBlockLabel内部时它可以工作,而否则就不行吗? - IgorStack
5
由于绑定的目标类型不同,因此会出现这种情况。TextBlock.Text 是一个 string 类型,但是 Label.Content 是一个 object 类型。StringFormat 属性仅对字符串类型的目标起作用。 - Sorensen

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