在Dock Panel中设置Trigger

时间:2011-07-07 11:53:47

标签: xaml

我有一个Dock面板,我想根据属性值设置它的高度。

以下编译,但不执行:

<DockPanel Grid.Row="1"
            Visibility="{Binding Path=IsValid}" Margin="8,4">
            <DockPanel.Triggers>
                <Trigger Property="FrameworkElement.Visibility" Value="Visible">
                    <Setter Property="FrameworkElement.Height" Value="150"/>
                </Trigger>
                <Trigger Property="FrameworkElement.Visibility" Value="Hidden">
                    <Setter Property="FrameworkElement.Height" Value="0"/>
                </Trigger>
            </DockPanel.Triggers>
            <ListBox Height="150"/>
        </DockPanel>

我做错了什么?任何帮助,非常感谢。

由于

1 个答案:

答案 0 :(得分:2)

来自MSDN

  

请注意,在元素上建立的触发器集合仅支持EventTrigger,而不支持属性触发器(Trigger)。如果需要属性触发器,则必须将它们放在样式或模板中,然后直接通过Style属性将该样式或模板分配给元素,或者通过隐式样式引用间接分配。

因此,要实现这一点,您需要一个样式或模板。我认为您不希望改变DockPanel的外观,所以样式是:

<DockPanel Grid.Row="1" Visibility="{Binding Path=IsValid}" Margin="8,4">
    <DockPanel.Style>
       <Style>
           <Style.Triggers>
               <Trigger Property="FrameworkElement.Visibility" Value="Visible">
                   <Setter Property="FrameworkElement.Height" Value="150"/>
               </Trigger>
               <Trigger Property="FrameworkElement.Visibility" Value="Hidden">
                   <Setter Property="FrameworkElement.Height" Value="0"/>
               </Trigger>
           </Style.Triggers>
       </Style>
    </DockPanel.Style>

    <ListBox Height="150"/>
</DockPanel>