如前所述,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 相对源绑定放入样式中,以避免对所有标签重复它。