原文:[UWP-小白日记16]UWP中的3D变换API

还没开始

  好久没写博客了,再来开坑。

正文

  Transform3D:“这个和CSS的3D好像的说”

  PerspectiveTransform3D:这个用来指定容器是否具有3D空间,都是放在根容器下面的。

  注意Depth:默认1000,如过设置过大会导致子元素超出容器

<Grid Background="{StaticResource ProcurePageBackground}">
<Grid.Transform3D>
<PerspectiveTransform3D Depth="" />
</Grid.Transform3D>
</Grid>

  CompositeTransform3D:需要做3D变换的子元素上设定。

<Border BorderBrush="Black"
BorderThickness=""
Background="#FF0B5B29"
Loaded="Border_Loaded">
<Border.Transform3D>
<CompositeTransform3D ></CompositeTransform3D>
</Border.Transform3D>
<TextBlock Text="" />
</Border>

  按着上面的设定一个基本的3D变换就设定完成了

TIPS:注意这玩意有个坑,注意Z-Index!注意Z-Index!注意Z-Index!在XAML上后面的元素会覆盖前面的元素,so,如果你做立方体什么的要自己

计算Z-Index以免后面的元素覆盖前面的元素

实例

  

注意:3D空间的正负方向,Y轴左转是正,右转是负,这个自己试下就知道了。

实现代码:

 <Storyboard x:Name="InSB">
<DoubleAnimation Storyboard.TargetName="LeftGrid"
Storyboard.TargetProperty="(UIElement.Transform3D).(CompositeTransform3D.RotationY)"
Duration="0:0:3"
To=""
EnableDependentAnimation="True"></DoubleAnimation>
</Storyboard>
<Grid Background="{StaticResource ProcurePageBackground}">
<Grid.Transform3D>
<PerspectiveTransform3D Depth="" />
</Grid.Transform3D>
    <Grid Name="LeftGrid" Loaded="LeftGrid_Loaded">
<Grid.Transform3D>
<CompositeTransform3D/>
</Grid.Transform3D>
<Border BorderBrush="Red"
BorderThickness=""
Background="#FF11321E">
<TextBlock Text="" />
</Border>
<Border BorderBrush="Black"
BorderThickness=""
Background="#FF0B5B29"
Loaded="Border_Loaded">
<Border.Transform3D>
<CompositeTransform3D />
</Border.Transform3D>
<TextBlock Text="" />
</Border>
      </Grid>
</Grid>

注意下面Border_Loaded中temp.TranslateX和temp.RotationY的顺序,你可以自己互换看看有什么不同。

private void LeftGrid_Loaded(object sender, RoutedEventArgs e)
{
var temp = LeftGrid.Transform3D as CompositeTransform3D;
temp.CenterZ = -centePos;
temp.CenterX = centePos;
} private void Border_Loaded(object sender, RoutedEventArgs e)
{
(sender as Border).Width = WidthGrid;
var temp = (sender as Border).Transform3D as CompositeTransform3D;
temp.TranslateX = WidthGrid;
temp.RotationY = -;
}
double centePos;
private double WidthGrid; public MainPage()
{
this.InitializeComponent(); centePos = (this.ActualWidth / ) / ;
WidthGrid = this.ActualWidth / ;
this.SizeChanged += (s, e) =>
{
centePos = (e.NewSize.Width / ) / ;
WidthGrid = e.NewSize.Width / ;
};
}

[UWP-小白日记16]UWP中的3D变换API的更多相关文章

  1. [UWP小白日记-9]页面跳转过度动画(二)

    又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...

  2. WPF中的3D变换PlaneProjection

    在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果.这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供. 虽然W ...

  3. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

  4. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入

    说实话重来没想到验证输入是如此的苦逼的一件事情.     网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...

  5. [UWP小白日记-8]一些零碎的东西

    设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...

  6. [UWP小白日记-6]页面跳转过度动画

    前言 在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪. 再后来 ...

  7. [UWP小白日记-5]转换MVA学院的XML字幕为SRT

    开源地址:第二版开源地址GIT 暂时用不了了,在最新的WIN10 10586.494系统上回闪退,正在酝酿第二版 O(∩_∩)O哈哈~ 新版已经完工:第二版 地方MVA上好多教程,但是微软的所有中国网 ...

  8. [UWP小白日记-2]SQLite数据库DOME

    数据库说简单点就是增删改查,但是对新手来说也是要爆肝的.作为一个新手爆肝无数次啊, 血的教训啊现在UWP的教程又少,说多了都是泪.留下来免得以后又爆肝.还有:一定要写注释!一定要写注释!一定要写注释! ...

  9. [UWP小白日记-12]使用新的Composition API来实现控件的阴影

    前言 看了好久官方的Windows UI Dev Labs示例好久才有点心得,真是头大.(其实是英语幼儿园水平(⊙﹏⊙)b) 真的网上关于这个API的资料可以说几乎没有. 正文 首先用这东西的添加WI ...

随机推荐

  1. JavaMail| JavaMail配置属性

    属性名 含义 mail.smtp.user SMTP的缺省用户名. mail.smtp.host 要连接的SMTP服务器. mail.smtp.port 要连接的SMTP服务器的端口号,如果conne ...

  2. Qt 学习: 视图选择 (QItemSelectionModel)

    博主QQ:1356438802 选择是视图中经常使用的一个操作.在列表.树或者表格中,通过鼠标点击能够选中某一项,被选中项会变成高亮或者反色.在 Qt 中,选择也是使用了一种模型.在 model/vi ...

  3. nodejs版本号更新问题:express不是内部或外部命令

    版本号更新后,我们使用熟悉的npm install -g express命令安装,可是,成功安装之后竟然提示express不是内部或外部命令. nodejs小问题:[1]express不是内部或外部命 ...

  4. [React] Keep Application State in Sync with Browser History

    Using pushState and passing route data via context allows our application to respond to route change ...

  5. 【t077】宝物筛选

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物--这下小FF可发财了.但是这里的宝物实在是太多 ...

  6. js如何遍历表单所有控件

    js如何遍历表单所有控件 一.总结 一句话总结: 1.获取form表单里面的的所有元素:通过formelement.elements,这里form元素通过name属性直接定位 var fele=for ...

  7. UITableView的一些常用设置和代理方法

    - (void)viewDidLoad { [super viewDidLoad]; tableview = [[UITableView alloc]initWithFrame:CGRectMake( ...

  8. iPhone6/6Plus下app状态栏内容放大问题处理

    分为兼容模式和高分辨率模式. 兼容模式 当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320:然后等比例拉伸到大 ...

  9. Visual Studio for Mac

    Visual Studio for Mac 初体验   你喜爱的 IDE,现在可用于 Mac 来自:https://www.visualstudio.com/zh-hans/vs/visual-stu ...

  10. 华为云软件开发云:容器DevOps,原来如此简单!

    当开发团队把代码提交到 Git 应用仓库的那一刻,他们心里在想什么? 祈祷没有bug?渴望回家补觉?产品经理Go Die? 对,也不对.因为这只是最终发布万里长征的一小步,接下来要面对测试环境.生产环 ...