我在屏幕顶部有一个Rectangle
我试图动画到屏幕底部。所以,我试图将屏幕的高度减去矩形的高度。由于屏幕高度会因分辨率和浏览器大小而异,我试图在用户控件上设置ActualHeight属性的值 - 20(矩形的高度)。
有没有人知道将这个计算值用作我想要移动矩形的距离的好方法?我可以为此使用自定义表达式,如果是,表达式是什么?我还考虑过向用户控件中添加另一个包含此值的属性,但我似乎没必要这样做。如果可能的话,我宁愿在自定义表达式框中使用一些数学。谢谢你的任何建议。
答案 0 :(得分:0)
如果没有一些代码,无法想象这一点。如果您的对象总是具有相同的高度,您可以创建一个转换器,它返回应用程序布局根的ActualHeight(App.Current.RootVisual)减去对象高度(20)并将其绑定到DoubleAnimation的“To”属性。 / p>
答案 1 :(得分:0)
如果您在动画故事板中命名元素(即使用x:Name),则可以更改故事板中的值,而无需在代码中创建整个事物。
这是一个完整的示例,可以在您调整浏览器大小时将矩形移动到底部:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="StackOvewflow2.Animation"
d:DesignWidth="640" d:DesignHeight="480"
SizeChanged="UserControl_SizeChanged">
<UserControl.Resources>
<Storyboard x:Name="Storyboard1">
<DoubleAnimation x:Name="TargetValue" Duration="0:0:1" To="380" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="rectangle" d:IsOptimized="True"/>
</Storyboard>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Rectangle x:Name="rectangle" Fill="LightBlue" Height="100" Stroke="Blue" StrokeThickness="6" VerticalAlignment="Top" HorizontalAlignment="Center" Width="400" RenderTransformOrigin="0.5,0.5">
<Rectangle.RenderTransform>
<CompositeTransform/>
</Rectangle.RenderTransform>
</Rectangle>
</Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;
namespace StackOvewflow2
{
public partial class Animation : UserControl
{
public Animation()
{
InitializeComponent();
}
private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.TargetValue.To = e.NewSize.Height - rectangle.Height;
Storyboard1.Begin();
}
}
}