我有一个故事板,用于在按下ToggleButton但Grid格式的高度是硬编码时更改Grid的大小。如何根据其他元素设置其高度,还要为其添加额外的像素?更具体地说,我希望Grid在折叠时为50pt,但在展开时它应该是50pt +另一个元素的高度(将在Grid中显示,在额外的空间中)。
<Style TargetType="{x:Type Grid}" x:Key="ExpandCollapseTopBar">
<Style.Triggers>
<EventTrigger RoutedEvent="ToggleButton.Checked">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Grid.Height)" From="50.0" To="100.0" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="ToggleButton.Unchecked">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Grid.Height)" From="100.0" To="50.0" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
我会使用绑定到其他元素的高度但是我无法添加额外的像素。
Height="{Binding ElementName=TheOtherElement, Path=ActualHeight}"
答案 0 :(得分:1)
通过处理ToggleButton.Checked
的{{1}}和ToggleButton.UnChecked
事件来以编程方式
Grid
然后你可以根据需要计算身高。您无法使用标记语言(如XAML)执行此操作。
这并不会以任何方式破坏MVVM。 MVVM 不关于从视图中删除与视图相关的代码。这是关于分离关注点。
答案 1 :(得分:0)
您可以使用像CalcBinding这样的库来创建绑定标记扩展来执行此操作。
我没试过,但应该这样:
Height="{calc:Binding ElementName=TheOtherElement, Path=ActualHeight + 50}"
如果您不想依赖外部库,那么可以使用Converter
来添加额外的像素。要做一些像这样简单的事情,这就是我要遵循的路线。