为什么这个触发器有效?

时间:2012-05-19 10:39:36

标签: wpf attached-properties

只要TextBlock有一个空字符串值,底部的代码就会使DockPanel Visibility = Collapsed,这就是我想要的。但是,我偶然发生了这件事,我想知道为什么在TextBlock中设置DockPanel.Visibility附加属性会影响DockPanel。

我知道DockPanel.Dock是一个附加属性,你可以直接在一个元素中设置,例如

    <TextBlock DockPanel.Dock="Top"/>

..但你不能设置

    <TextBlock DockPanel.Visibility="Collapsed"/>

..以同样的方式。

那么Doc​​kPanel如何知道查询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>

0 个答案:

没有答案