我有一个自定义工具提示,我正在尝试设计。我有以下内容:
<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>
这很直截了当。标题将是粗体。描述将是常规字体粗细,“笔记”将以斜体显示。问题是并非我的所有ToolPrototype都将.Note作为成员(它基本上为null)。我的一些工具确实包含一个分配给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>
然而,这并没有建立,并说成员“可见性”无法识别。谁能指出我的错误?
答案 0 :(得分:1)
您的Style
未与TextBlock
类型相关联。
因此,WPF并不了解Visibility
属性。 (因为该属性由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>