C# 可视性取决于绑定值
我有一个自定义的工具提示,我正在尝试样式。我有以下资料:C# 可视性取决于绑定值,c#,wpf,C#,Wpf,我有一个自定义的工具提示,我正在尝试样式。我有以下资料: <UserControl.ToolTip> <StackPanel> <TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock> <TextBlock Text="
<UserControl.ToolTip>
<StackPanel>
<TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
<TextBlock Text="{Binding Path=ToolPrototype.Description}" MaxWidth="200" TextWrapping="Wrap"></TextBlock>
<TextBlock Text="{Binding Path=ToolPrototype.Note}" MaxWidth="200" FontWeight="Regular" FontStyle="Italic" TextWrapping="Wrap"></TextBlock>
</StackPanel>
</UserControl.ToolTip>
这很直截了当。标题将是粗体的。说明将采用常规字体,注释将以斜体显示。问题是并非我的所有工具原型都有.Note作为成员(它基本上是空的)。我的一些工具确实包含分配给Note属性的字符串值,但不是全部。因此,在注释为空的情况下,我的工具提示中仍然会有一个空白区域(基本上就像一个空行)。我只想在ToolPrototype实际定义了note属性的情况下包含该行。否则忽略它。所以,我想我要做的是尝试有条件地检查绑定是否存在。。。但也许这不是正确的思考方式。有人能提供一些指导吗
更新
根据ASh的建议,我尝试使用DataTriggers。这是我现在拥有的
<UserControl.ToolTip>
<StackPanel>
<TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
<TextBlock Text="{Binding Path=ToolPrototype.Description}" MaxWidth="200" TextWrapping="Wrap"></TextBlock>
<TextBlock MaxWidth="200" Text="{Binding Path=ToolPrototype.Note}" FontWeight="Regular" FontStyle="Italic" TextWrapping="Wrap">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ToolPrototype.Note}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</UserControl.ToolTip>
但是,这不会生成,并且表示成员“可见性”不被识别。有人能指出我的错误吗?您的
样式
与文本块
类型没有关联
因此,WPF不知道可见性
属性。(因为该属性由TextBlock
定义)
通过将属性更改为TextBlock.Visibility
,可以明确地告诉WPF哪个类定义了属性。让我举一个例子:
<UserControl.ToolTip>
<StackPanel>
<TextBlock Text="{Binding Path=ToolPrototype.TypeName}" MaxWidth="200" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
<TextBlock Text="{Binding Path=ToolPrototype.Description}" MaxWidth="200" TextWrapping="Wrap"></TextBlock>
<TextBlock MaxWidth="200" Text="{Binding Path=ToolPrototype.Note}" FontWeight="Regular" FontStyle="Italic" TextWrapping="Wrap">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ToolPrototype.Note}" Value="{x:Null}">
<Setter Property="TextBlock.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</UserControl.ToolTip>
@ASh是对的。如果经常出现这种情况,您还可以编写一个NullToVisibilityConverter
来保存XAML中的混乱:
我会按照ASh建议的触发方式。习惯了这一点,您就不用为任何事情实现转换器(请注意,有时转换器仍然是最好的解决方案,这取决于您的场景的复杂性),谢谢!但是,我是否在提供的链接中遗漏了一些内容?我似乎看不到任何包含数据触发器的答案。谢谢。愚蠢的错误。