根据 child 的内容隐藏 Canvas

hide Canvas depending on child's content

这是我最近一次尝试让 canvas 在 label.Content 为空字符串时不可见。任何 help/advice 感谢,谢谢。

<Canvas Visibility="Visible">
    <Label Content="" Name="holamouse" />
    <Canvas.Resources>
        <Style TargetType="{x:Type Canvas}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Content, ElementName=holamouse, UpdateSourceTrigger=PropertyChanged}" Value="{x:Static sys:String.Empty}">
                    <Setter Property="Canvas.Visibility" Value="Hidden"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Canvas.Resources>
</Canvas>

这里的问题是本地 属性 值总是比样式 Setter 设置的值具有更高的优先级。参见 Dependency Property Value Precedence

当您在 Canvas 上设置 Visibility="Visible" 时,属性 的任何样式 Setter 都会被静默忽略。您可以将 属性 分配给样式,尽管 Visible 无论如何都是默认值:

<Canvas>
    <Label Content="" Name="holamouse" />
    <Canvas.Resources>
        <Style TargetType="{x:Type Canvas}">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Content, ElementName=holamouse}"
                             Value="{x:Static sys:String.Empty}">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Content, ElementName=holamouse}"
                             Value="{x:Null}">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Canvas.Resources>
</Canvas>

另请注意,Value="{x:Null}" 现在有第二个触发器。

您需要将默认可见性 属性 移出 <Canvas> 标签并移至 <Style>

这是因为 <Tag> 中定义的属性优先于任何 属性 设置器,包括触发的 属性 设置器。如果您需要更多详细信息,请参阅 MSDN Dependency Property Precedence List

<Canvas>
    <Label Content="" Name="holamouse" />
    <Canvas.Resources>
        <Style TargetType="{x:Type Canvas}">
            <Setter Property="Canvas.Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Content, ElementName=holamouse, UpdateSourceTrigger=PropertyChanged}" Value="{x:Static sys:String.Empty}">
                    <Setter Property="Canvas.Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Canvas.Resources>
</Canvas>