首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MultiBinding StringFormat中删除空白

从MultiBinding StringFormat中删除空白
EN

Stack Overflow用户
提问于 2018-05-13 10:13:46
回答 2查看 584关注 0票数 0

无法从StringFormat中删除空白。

如果没有“类型”数据,下面的空格不会后退。

ReleaseDate,空间,空间,点,空间,空间,类型,空间(不移除这个空间的原因),颜色

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-13 11:07:34

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

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2018-05-14 12:46:30

虽然使用DataTrigger的方法是有效的,但它非常冗长。我将使其成为一个两步的过程:分别将Type与有空格的StringFormat绑定,然后将所有内容绑定到一起。

代码语言:javascript
复制
<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 +空格。如果类型为null,则绑定返回空字符串。

SomeString是一个没有特殊意义的可重用附加依赖属性。它宣布为

代码语言:javascript
复制
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属性,可用于存储(或绑定)某些数据,但标记的类型为object,不使用绑定中的StringFormat。因此,我不能在这里使用标记,必须创建另一个属性,该属性具有string类型。(还请注意绑定附加属性的特殊语法)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50315018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档