0

在我的 WPF 项目中,我有一个Label

<Label Grid.Column="1"
       Grid.Row="1">
    <PriorityBinding>
        <Binding Path="Worker.Employer.Name" StringFormat="Employer: {0}" />
        <Binding Source="Unemployed" />
    </PriorityBinding>
</Label>

上的 StringFormat 似乎没有做任何事情。但是,如果我添加这个:

<Label.ContentStringFormat>
    Employer: {0}
</Label.ContentStringFormat>

...格式化有效,但它会影响两个绑定。如何将 StringFormat 仅应用于顶部绑定?

更新:没有使用 aTextBlock而不是 a Label,有什么办法可以做到这一点吗?

4

2 回答 2

3

StringFormat 用于字符串(例如 TextBlock.Text),但 label.Content 是对象类型,因此您必须将 ContentStringFormat 用于 Label。

编辑:对于您的问题-如果您可以将标签更改为 TextBlock 那么您就没有问题了。但如果你想留下标签,我猜你必须使用转换器来应用你的字符串格式。

于 2013-06-18T05:38:09.563 回答
1

如前所述,StringFormat 仅在目标属性类型为文本时才有效。

一种解决方案是使用 ValueConverter 来格式化结果,您可以将格式字符串作为 ConverterParameter 传递。

未能创建附加的字符串类型的 DependencyProperty

public static class Helper {
    public static readonly DependencyProperty TextProperty = DependencyProperty.RegisterAttached("Text", typeof(string), typeof(Helper));

   public static string GetText(DependencyObject o) {
     return (string)o.GetValue(TextProperty);
   }

   public static void SetText(DependencyObject o, string value) {
      o.SetValue(TextProperty,value);
   }
}

然后你可以做

<Label Grid.Column="1"
       Grid.Row="1" 
       Content="{Binding RelativeSource={RelativeSource Self}, Path=(ui:Helper.Text)}">
    <ui:Helper.Text>
    <PriorityBinding>
        <Binding Path="Worker.Employer.Name" StringFormat="Employer: {0}" />
        <Binding Source="Unemployed" />
    </PriorityBinding>
    </ui:Helper.Text>
</Label>

评论中描述的问题可能与此问题有关,因此 XAML 可能需要看起来像这样。

<Label Grid.Column="1"
       Grid.Row="1" >
       <Binding RelativeSource="{RelativeSource Self}"  Path="(ui:Helper.Text)" />
      <ui:Helper.Text>
      <PriorityBinding>
          <Binding Path="Worker.Employer.Name" StringFormat="Employer: {0}" />
          <Binding Source="Unemployed" />
      </PriorityBinding>
      </ui:Helper.Text>
</Label>

或者从这个 MSDN question你可以做

<Label Grid.Column="1"
       Grid.Row="1" >
      <ui:Helper.Text>
      <PriorityBinding>
          <Binding Path="Worker.Employer.Name" StringFormat="Employer: {0}" />
          <Binding Source="Unemployed" />
      </PriorityBinding>
      </ui:Helper.Text>
      <Label.Content>
         <Binding RelativeSource="{RelativeSource Self}"  Path="(ui:Helper.Text)" />
      </Label.Content>
    </Label>

确保将 xmlns for ui 绑定到 Helper 类的命名空间

您始终可以将 Content 相对源绑定放入样式中,以避免对所有标签重复它。

于 2013-06-18T20:54:27.970 回答