将控制高度设置为其他控件的高度,但增加额外的高度

时间:2017-08-31 09:41:29

标签: wpf xaml

我有一个故事板,用于在按下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}"

2 个答案:

答案 0 :(得分:1)

通过处理ToggleButton.Checked的{​​{1}}和ToggleButton.UnChecked事件来以编程方式

Grid

然后你可以根据需要计算身高。您无法使用标记语言(如XAML)执行此操作。

这并不会以任何方式破坏MVVM。 MVVM 关于从视图中删除与视图相关的代码。这是关于分离关注点。

答案 1 :(得分:0)

您可以使用像CalcBinding这样的库来创建绑定标记扩展来执行此操作。

我没试过,但应该这样:

Height="{calc:Binding ElementName=TheOtherElement, Path=ActualHeight + 50}"

如果您不想依赖外部库,那么可以使用Converter来添加额外的像素。要做一些像这样简单的事情,这就是我要遵循的路线。