用于TextBlock的WPF DataTrigger来控制Text

dee*_*zen 1 c# wpf xaml

我有TextBlock

<TextBlock>                  
    <Run Text="{Binding Path=Value1}" />
    <Run Text="-" />
    <Run Text="{Binding Path=Value2}" />
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

我需要添加这样的触发器:如果Value2 = XXX,TextBlock应该只显示Value1.没有转换器和ViewModel修改可以做到吗?

dko*_*ozl 5

假设你不格式化每个Run单独(即FontSize,Foreground),而不是您可以使用MultiBindingStringFormat和更改Text时绑定Value2=XXX

<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>
Run Code Online (Sandbox Code Playgroud)