我正在尝试使用样式资源显示按钮以增长。为了实现这一点,我使用了一行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>