只要TextBlock有一个空字符串值,底部的代码就会使DockPanel Visibility = Collapsed,这就是我想要的。但是,我偶然发生了这件事,我想知道为什么在TextBlock中设置DockPanel.Visibility附加属性会影响DockPanel。
我知道DockPanel.Dock是一个附加属性,你可以直接在一个元素中设置,例如
<TextBlock DockPanel.Dock="Top"/>
..但你不能设置
<TextBlock DockPanel.Visibility="Collapsed"/>
..以同样的方式。
那么DockPanel如何知道查询DockPanel.Visibility的子元素,或者父元素总是查询所有附加属性的子元素,并且只要没有在本地设置值就使用这些元素?我的印象是只有某些附加属性以这种方式使用(例如DockPanel.Dock)。
此外,还有其他方法可以实现相同的结果(例如,使用在DockPanel样式中设置的触发器 - 似乎问题似乎是errorTextBlock名称不在范围内)
<DockPanel x:Key="errorDisplay" LastChildFill="False">
<Border Background="Red" DockPanel.Dock="Top" BorderBrush="Black" BorderThickness="1">
<TextBlock Padding="4" x:Name="errorTextBlock">
<TextBlock.Style>
<Style>
<Style.Triggers>
<Trigger Property="TextBlock.Text" Value="">
<Setter Property="DockPanel.Visibility" Value="Collapsed"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
</DockPanel>