根据 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>
这是我最近一次尝试让 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>