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



我有一个故事板,当按下togglebutton时,我用来更改网格的大小,但是网格的高度是硬编码的。如何根据其他元素设置其高度,但还会在其中添加额外的像素?更具体地说,我希望电网崩溃时的网格为50pt,但是扩展时应该是另一个元素的50pt 高度(将在网格中显示,在额外的空间中)。

<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}"

通过处理 ToggleButton.CheckedToggleButton.UnCheckedGrid事件来应用动画编程

private void Grid_Checked(object sender, RoutedEventArgs e)
{
    Storyboard sb = new Storyboard();
    double height = 100; //set whatever height you want here
    DoubleAnimation animation = new DoubleAnimation() { From = 50.0, To = height, Duration = TimeSpan.FromSeconds(1) };
    Storyboard.SetTargetProperty(animation, new PropertyPath("(Grid.Height)"));
    Storyboard.SetTarget(animation, sender as Grid);
    sb.Children.Add(animation);
    sb.Begin();
}

然后,您可以根据需要计算高度。您不能用 markup 语言(例如xaml。

)执行此操作。

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

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

我没有尝试过,但是应该这样起作用:

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

如果您不想依靠外部库,那么要使用的方法是使用Converter,它会添加额外的像素。要做这样简单的事情,这是我要遵循的路线。

最新更新