我想创建一个WPF usercontrol,当且仅当datacontext == null时才显示字符串。我在绑定中使用TargetNullValue属性在datacontext为null时显示自定义字符串,并且按预期工作。但是当datacontext为非null时,它只显示ToString值,我想摆脱它。
当然我可以通过使用valueconverter轻松解决这个问题,但我想找到一种方法来解决这个问题,只能使用xaml。有谁知道这样做的方法?
答案 0 :(得分:3)
如果您希望仅在绑定值为空的情况下显示TextBlock
,则可以使用触发器,并在绑定值为null时将Visibility
设置为Visible
以及Collapsed
总是。
<TextBlock Text="{Binding TargetNullValue=NullValue}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
答案 1 :(得分:2)
在{x:Null}
上使用数据触发器。根据品味和需求,有很多选项可以使用样式,数据模板等。例如:
<DataTemplate x:Key="ShowOnNull">
<TextBlock x:Name="text"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter TargetName="text" Property="Text" Value="your custom string"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
...
<ContentPresenter ContentTemplate="{StaticResource ShowOnNull}"
Content="{Binding ...}"/>