更好地绑定 DataTrigger
Better Binding for DataTrigger
我有一个 TextBlock
,当 TextBlock
没有文本时,我想将 属性 Visibility
设置为 Collapsed
。我想知道我,当然应该有更好的方法来检查 属性 Text
的 Lenght
是否等于 0.
<TextBlock Name="TextBlockHeader" Foreground="White" FontSize="18" FontWeight="Bold" Text="{Binding Header}" Margin="0,0,0,25">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=TextBlockHeader, Path=Text.Length}" Value="0">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
在这里我必须为 TextBlock
定义一个名称,我可以在 Datatrigger
Binding="{Binding ElementName=TextBlockHeader, Path=Text.Length}"
中引用它
但是我怎样才能在不必为 TextBlock
?
定义名称的情况下实现相同的目标呢?
您通常会使用触发器而不是数据触发器,并将文本 属性 与 null
或空字符串进行比较。
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Style.Triggers>
</Style>
由于 TextBlock class 似乎将 Text 属性 值强制为非空,因此对于空字符串只有第二个触发器就足够了。
我有一个 TextBlock
,当 TextBlock
没有文本时,我想将 属性 Visibility
设置为 Collapsed
。我想知道我,当然应该有更好的方法来检查 属性 Text
的 Lenght
是否等于 0.
<TextBlock Name="TextBlockHeader" Foreground="White" FontSize="18" FontWeight="Bold" Text="{Binding Header}" Margin="0,0,0,25">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=TextBlockHeader, Path=Text.Length}" Value="0">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
在这里我必须为 TextBlock
定义一个名称,我可以在 Datatrigger
Binding="{Binding ElementName=TextBlockHeader, Path=Text.Length}"
中引用它
但是我怎样才能在不必为 TextBlock
?
您通常会使用触发器而不是数据触发器,并将文本 属性 与 null
或空字符串进行比较。
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Style.Triggers>
</Style>
由于 TextBlock class 似乎将 Text 属性 值强制为非空,因此对于空字符串只有第二个触发器就足够了。