- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含一些内容(图像、文本)的Grid
,我想在 3D 空间中围绕 y 轴旋转它 - 以某种方式实现动画倾斜效果。
有没有像Rotate3DTransform这样直接适用于Grid
的简单方法?
最佳答案
使用 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 主机,当前托管带有图像 block 的网格。
您还可以将其转换为 ContentControl 的样式和模板,并附加用于旋转的属性,并在您需要的地方重复使用它。
使用二维变换
使用普通变换实现 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>
关于wpf - 如何围绕 3D 轴 (Y) 旋转 2D UIElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223313/
我将一些代码从 C# 翻译成 VB.NET(WPF、.NET 4) C# // Update the Z-Index of every UIElement in the Canvas. foreach
假设我想创建一个直接从 UIElement 继承的类,并且能够包含一个或多个 [外部添加的] UIElement 作为子级 - 如 Panel 和其他容器控件。让类以某种形式包含一组 UIElemen
场景:我有一个自定义范围UIElements (事实上,我已经替换了所有标准的 WPF FrameworkElements 我将使用更轻、更高效的对应物)用于自定义布局系统,旨在仅使用这些。它们都
执行此操作时出现运行时错误。 我有这门课: public abstract class AnnObject : DependencyObject 当我这样做时,它可以正常编译,但会引发运行时错误...
执行此操作时出现运行时错误。 我有这门课: public abstract class AnnObject : DependencyObject 当我这样做时,它可以正常编译,但会引发运行时错误...
首先让我说我是单元测试的新手,这实际上是我第一次尝试这样做。 我正在开发一个应用程序,用户可以在其中向 Canvas 添加元素、选择它们、移动它们等等。在每个选定的元素上,我添加一个 Adorner。
是否可以在 WPF 中订阅特定 UIElement 的属性? 我想在 Heightvalue 更改后立即为 UIElement 设置动画并将新高度添加到列表中,但我不知道如何订阅 HeightProp
在我的代码隐藏中,我想在特定的 UIElement 上启动动画,当该动画结束时,我想在该 UIElement 上进行一些其他处理。我无法弄清楚如何将我作为 Animation Completed 事件
我正在尝试获取托管 UIElement 的 Window 实例WinUI 3 中的实例。 有一个 helper method in the Window class in .NET ( see thi
我有这个代码: RotateTransform transform = myImage.RenderTransform as RotateTransform; transform.Angle = 25
我对下面的标记有两个问题: 为什么VisualTreeHelper.GetParent(button)返回空? 我怎样才能得到父级 Popup为 UIElement ? 最佳答案 而不是
有没有办法对 UIElements 进行逻辑分组或标记,例如在运行时添加的形状和控件以便于删除? 例如,我有一个 Grid带有一些(设计时)子元素并添加椭圆和 TextBlock s 到它在运行时。当
我不清楚您何时会使用 UIElement而不是 FrameworkElement ,以及为什么会有 FrameworkElement根本没有课。本质上,FrameworkElement 的额外功能是什
在 WPF 中如何放置常规 UIElement s 内嵌文本?例如,某种文本分类将用包含特定选项的下拉列表替换一段文本。 我使用了像 Span、Bold、Hyperlink 这样的对象,它们对内联文本
好的,我知道 FrameworkElement ,它是 UIElement 的直接子类, 具有 Parent 属性,但 Panels 具有类型 UIElement 的子级,不是 FrameworkEl
我有一些 xaml 标记,基本上如下所示: 我想判断鼠标是否超过Canvas B. 当我在鼠标悬停在 Canvas B 上时单击时,Mouse.DirectlyOver 返回 Canv
在 WPF/Silverlight 中,我可以在应用转换后获取 UIElement 的计算值吗? (根据下面的评论): 我有一个堆栈面板,并对其应用了 TranformGroup。该组中有两个平移和一
我的应用程序被标记为 UIElement 且仅限背景。我希望它在登录时加载。我是否仍然需要帮助应用程序来启动它,或者我可以使用 SMLoginItemSetEnabled 注册应用程序本身。 最佳答案
我一切正常,但是当我单击设置时,设置窗口(在 nswindowcontroller 中)会在我的 Mac 上运行的其他应用程序的背面打开。我希望它位于前面,以便用户单击它时可以看到它。 谢谢大家! 最
我正在尝试寻找一种通用方法来设置 UIElement 的 Background 属性。 我运气不好... 这是我目前所拥有的(尝试使用反射来获取 BackgroundProperty)。 Acti
我是一名优秀的程序员,十分优秀!