WPF:在SizeChanged上将元素动画化为新大小

时间:2018-04-10 13:58:04

标签: c# wpf user-interface wpf-animation

我正在尝试使用样式资源显示按钮以增长。为了实现这一点,我使用了一行1的统一网格,因此按钮将始终具有相同的大小,并且在未折叠时均匀填充空间。当按钮将其可见性从折叠变为可见时,我希望它基本上增长到容器大小的一半,而另一个按钮缩小到容器大小的一半(从完整大小)。

Uniformgrid:

<UniformGrid VerticalAlignment="Bottom" Rows="1">
        <Button x:Uid="nextBtn" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="backBtn" Content="{loc:Loc Key=STRING_BACK}" Style="{StaticResource NavBtn}" Click="backBtn_Click" Visibility="Collapsed"/>
        <Button x:Uid="nextBtn" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="nextBtn" Content="{loc:Loc Key=STRING_NEXT}" Style="{StaticResource NavBtn}" Click="nextBtn_Click"/>
    </UniformGrid>

问题是我不想硬编码按钮或uniformgrid的宽度。我读到WPF会冻结资源,所以遗憾的是我不能在这里使用绑定来帮助它。由于uniformgrid会调整按钮的大小,因此我基本上只需要在元素大小发生变化时为其设置动画。

有没有办法在WPF中执行此操作,还是有更好的方法?这似乎是可能的,因为在调用SizeChanged时调试时,ActualWidth现在有一个值而Width是NaN。

按钮样式:

<Style TargetType="Button" x:Key="NavBtn">
    <Setter Property="RenderTransform">
        <Setter.Value>
            <ScaleTransform ScaleX="1"></ScaleTransform>
        </Setter.Value>
    </Setter>
    <Setter x:Uid="Setter_2" Property="Template">
        <Setter.Value>
            <ControlTemplate x:Uid="ControlTemplate_1" TargetType="{x:Type Button}">
                <Border x:Uid="Border_1" Background="{TemplateBinding Background}">
                    <ContentPresenter x:Uid="ContentPresenter_1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <EventTrigger RoutedEvent="SizeChanged">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="0:00:00.1"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

0 个答案:

没有答案