原文:[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 / ;
};
}

最新文章

  1. indexOf 用法
  2. webstorage[html5的本地数据处理]
  3. java servlet调用带有多个返回结果集的存储过程
  4. Android保存ArrayList至SharedPreferences
  5. UIView的autoresizingMask和autoresizesSubviews属性的剖析
  6. 車(rook)
  7. 【poj1745】 Divisibility
  8. 关于使用UDP(TCP)跨局域网,NAT穿透的心得
  9. c++ 设计模式4 (Strategy)
  10. Insist
  11. Ubuntu下配置tftp服务
  12. 【转】VMware Workstation 11 永久激活码key 非注册机
  13. Shell - 特殊变量
  14. Block小结
  15. GDI+: Curved Shapes
  16. Scala学习---数组
  17. 面试之路(29)-TCP流量控制和拥塞控制-滑动窗口协议详解
  18. 《通过C#学Proto.Actor模型》之Persistence
  19. Python中csv模块解析
  20. Axure XMind整理交互思路

热门文章

  1. 在CentOS上使用Nginx和Tomcat搭建高可用高并发网站
  2. python 设计模式之 单例模式
  3. echarts怎么使用(最最最最简单版)(本质canvas)
  4. 学习鸟哥的Linux私房菜笔记(5)——目录
  5. 【14.67%】【codeforces 615D】Multipliers
  6. warning MSB3245: 未能解析此引用。未能找到程序集“CemeteryBLL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。
  7. C# WPF 多个window 相互覆盖的次序控制 不用topmost
  8. Vue 兄弟组件之间传递数值
  9. Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产(使用cef 内核)
  10. 使用google自带包实现下拉刷新功能