从MultiBinding StringFormat中删除空格

时间:2018-05-13 10:13:46

标签: wpf xaml

无法从StringFormat中删除空格。

如果没有'Type'数据,则后面的空格不会后退。

ReleaseDate,空格,空格,点,空格,空格,类型,空格(某些原因它不会删除此空格),颜色

<TextBlock>
  <TextBlock.Text>
    <MultiBinding StringFormat="{}{0:yyyy}  ·  {1} {2}" >
      <Binding Path="ReleaseDate" FallbackValue="{x:Null}"/>
      <Binding Path="Type" FallbackValue="{x:Null}"/>
      <Binding Path="Color" FallbackValue="{x:Null}"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

2 个答案:

答案 0 :(得分:1)

您可能会用DataTrigger替换MultiBinding及其StringFormat:

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="{}{0:yyyy}  ·  {1} {2}" >
                        <Binding Path="ReleaseDate" FallbackValue="{x:Null}"/>
                        <Binding Path="Type"/>
                        <Binding Path="Color" FallbackValue="{x:Null}"/>
                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Type}" Value="{x:Null}">
                    <Setter Property="Text">
                        <Setter.Value>
                            <MultiBinding StringFormat="{}{0:yyyy}  ·  {1}" >
                                <Binding Path="ReleaseDate" FallbackValue="{x:Null}"/>
                                <Binding Path="Color" FallbackValue="{x:Null}"/>
                            </MultiBinding>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

答案 1 :(得分:0)

虽然DataTrigger的方法有效,但它非常详细。我将它分为两​​步:将Type分别与具有空格的StringFormat绑定,然后将所有内容绑定在一起

<TextBlock Name="Title" 
           local:Attached.SomeString="{Binding Type, 
                                       StringFormat='\{0} ',
                                       TargetNullValue=''}">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:yyyy}  ·  {1}{2}">
            <Binding Path="Login" />
            <Binding Path="(local:Attached.SomeString)" 
                     RelativeSource="{RelativeSource Self}" />
            <Binding Path="Name" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

如果Type不是null,则SomeString绑定使用字符串格式,并在结尾返回Type + space。如果Type为null,则绑定返回空字符串。

SomeString是一个可重用的附加依赖属性,没有特殊含义。它声明为

public class Attached
{
    public static readonly DependencyProperty SomeStringProperty =
        DependencyProperty.RegisterAttached("SomeString", typeof (string), typeof (Attached));

    public static void SetSomeString(UIElement element, string value)
    {
        element.SetValue(SomeStringProperty, value);
    }

    public static string GetSomeString(UIElement element)
    {
        return (string)element.GetValue(SomeStringProperty);
    }
}

TextBlock具有Tag属性,可用于存储(或绑定)某些数据,但Tag的类型为object,并且不使用StringFormat进行绑定。所以我不能在这里使用Tag作为我的目的,并且必须创建另一个具有string类型的属性。 (还要注意绑定附加属性的特殊语法)