我有一个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>
我做错了什么?任何帮助,非常感谢。
由于
乔
答案 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>