简体   繁体   English

WPF DataTrigger用于TextBlock以控制文本

[英]WPF DataTrigger for TextBlock to control Text

I have TextBlock 我有TextBlock

<TextBlock>                  
    <Run Text="{Binding Path=Value1}" />
    <Run Text="-" />
    <Run Text="{Binding Path=Value2}" />
</TextBlock>

I need to add such trigger: If Value2 = XXX, TextBlock should display only Value1. 我需要添加这样的触发器:如果Value2 = XXX,则TextBlock应该仅显示Value1。 Is that possible to do without converters and ViewModel modifications? 没有转换器和ViewModel修改就可以做到吗?

Assuming that you don't format each Run individually (ie FontSize , Foreground ) instead you can use MultiBinding with StringFormat and change Text binding when Value2=XXX 假设您不设置每个Run单独格式(即FontSizeForeground ),则可以将MultiBindingStringFormat一起使用,并在Value2=XXX时更改Text绑定

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="{}{0} - {1}">
                        <Binding Path="Value1"/>
                        <Binding Path="Value2"/>
                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Value2}" Value="XXX">
                    <Setter Property="Text" Value="{Binding Value1}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
    <TextBlock>                  
        <Run Text="{Binding Path=prop1}" />
        <Run Text="-" />
        <TextBlock>
            <TextBlock.Style>
                 <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=prop2}" Value="XXX">
                            <Setter Property="TextBlock.Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
            <Run Text="{Binding Path=prop2}" />
         </TextBlock>
    </TextBlock>

is the only way i found. 是我发现的唯一方法。 A run has no visibility property. 运行没有可见性属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM