可见性取决于绑定值

时间:2016-04-22 14:04:58

标签: c# 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 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>

然而,这并没有建立,并说成员“可见性”无法识别。谁能指出我的错误?

1 个答案:

答案 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>