WPF DataTrigger for TextBlock 控制Text
WPF DataTrigger for TextBlock to control Text
我有文本块
<TextBlock>
<Run Text="{Binding Path=Value1}" />
<Run Text="-" />
<Run Text="{Binding Path=Value2}" />
</TextBlock>
我需要添加这样的触发器:如果 Value2 = XXX,TextBlock 应该只显示 Value1。
如果没有转换器和 ViewModel 修改,这可能吗?
<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>
是我找到的唯一方法。 运行 没有可见性 属性。
假设您不单独格式化每个 Run
(即 FontSize
、Foreground
),您可以使用 MultiBinding
和 StringFormat
并更改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>
我有文本块
<TextBlock>
<Run Text="{Binding Path=Value1}" />
<Run Text="-" />
<Run Text="{Binding Path=Value2}" />
</TextBlock>
我需要添加这样的触发器:如果 Value2 = XXX,TextBlock 应该只显示 Value1。 如果没有转换器和 ViewModel 修改,这可能吗?
<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>
是我找到的唯一方法。 运行 没有可见性 属性。
假设您不单独格式化每个 Run
(即 FontSize
、Foreground
),您可以使用 MultiBinding
和 StringFormat
并更改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>