我有Grid
一些内容(图片,文字),我想在3D空间中围绕y轴旋转 - 不知何故是一种动画倾斜效果。
是否有一种简单的方法,例如Rotate3DTransform直接适用于Grid
?
答案 0 :(得分:5)
使用Viewport3D
如果您愿意使用3D模型和旋转,那么这是我试图为您准备的样本,我试图重现预期的结果,可能不准确
<Viewport3D>
<Viewport3D.Resources>
<Style TargetType="Image">
<Setter Property="Width"
Value="20" />
<Setter Property="Margin"
Value="4" />
<Setter Property="Source"
Value="desert.jpg" />
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="4"
Direction="0"
ShadowDepth="0" />
</Setter.Value>
</Setter>
</Style>
</Viewport3D.Resources>
<Viewport3D.Camera>
<PerspectiveCamera Position="0, 0, 4" />
</Viewport3D.Camera>
<Viewport2DVisual3D>
<Viewport2DVisual3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<QuaternionRotation3D x:Name="rotate"
Quaternion="0, 0, 0, 0.5" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Viewport2DVisual3D.Transform>
<Viewport2DVisual3D.Geometry>
<MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
TextureCoordinates="0,0 0,1 1,1 1,0"
TriangleIndices="0 1 2 0 2 3" />
</Viewport2DVisual3D.Geometry>
<Viewport2DVisual3D.Material>
<DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" />
</Viewport2DVisual3D.Material>
<UniformGrid Columns="3"> <!--host your content here-->
<Image />
<Image />
<Image />
<Image />
<Image />
<Image />
<Image />
<Image />
<Image />
</UniformGrid>
</Viewport2DVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFFFF"
Direction="0,0,-1" />
</ModelVisual3D.Content>
</ModelVisual3D>
<Viewport3D.Triggers>
<EventTrigger RoutedEvent="Viewport3D.Loaded">
<BeginStoryboard>
<Storyboard>
<QuaternionAnimation Storyboard.TargetName="rotate"
Storyboard.TargetProperty="Quaternion"
To="-0.25, 0.25, 0.15, 0.65"
Duration="0:0:10"
RepeatBehavior="Forever">
<QuaternionAnimation.EasingFunction>
<ElasticEase />
</QuaternionAnimation.EasingFunction>
</QuaternionAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Viewport3D.Triggers>
</Viewport3D>
现在您可以旋转您的模型,即UI主机,当前使用图像切片托管网格。
你也可以把它转换成风格和风格ContentControl的模板,带有附加属性以便轮换,并在需要的地方重复使用。
使用2D转换
您可以使用正常变换实现3D变换为网格的示例
关键是将3D变换转换为2D并直接应用于网格而不需要复杂的3D内容(此示例没有任何转换)它只是演示了一个3D外观网格变换供您参考。
<Grid Width="100" Height="100" >
<Grid.Background>
<ImageBrush Opacity=".5" ImageSource="Desert.jpg"/>
</Grid.Background>
<Button Content="Some Text" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Grid.RenderTransform>
<SkewTransform x:Name="skew" CenterX="50" CenterY="50"/>
</Grid.RenderTransform>
<Grid.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="skew" Duration="0:0:25" Storyboard.TargetProperty="AngleX" From="0" To="60" RepeatBehavior="Forever">
<DoubleAnimation.EasingFunction>
<ElasticEase/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetName="skew" Duration="0:0:20" Storyboard.TargetProperty="AngleY" From="0" To="50" RepeatBehavior="Forever">
<DoubleAnimation.EasingFunction>
<ElasticEase/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>