WPF中LayoutTransform转换的问题
这两天没什么事就看了看WPF,在赞叹WPF强大的同时,又对WPF动画制作时操作的不便感到无耐,可能是blend刚起步吧.另一个就是黑金刚的界面让人不舒服,看到2.0里有换肤,暗暗的高兴了一下,可换了后才知道,只是黑金刚变成灰金刚了,-_-!!
转入正题吧......
我们知道blend里有个转换属性,可以使对象旋转,放大,缩小.但是如果把对象放在一个容器里,转换时只会影响该对象,而不会影响容器,怎么办呢?
没办法查帮助吧.打开帮助后才知道原来转换有两个类,一个类是RotateTransform,也就是blend属性面板上的,从XAML代码中我们也可以看到.别一个类就是LayoutTransform类,这个类与RotateTransform不同,他的转换会同时影响容器.
但问题又来了,这个属性在哪设呢,翻遍了Blend和帮助也没有找到,反正我是没找到,没办法只有上网查了,可网上也只有寥寥几个对这两个属性说明的.查过英文网站,好象也有人问这个问题(E文不好,只能看个大概).
看来只有改代码了(我这人比较懒,能不改代码可以实现的,就不想改代码),
先在Blend中设好转换属性,再在代码中找到对应的RotateTransform代码改为LayoutTransform,如
<Button.RotateTransform>
...
</Button.RotateTransform>
更改后为:
<Button.LayoutTransform>
...
</Button.LayoutTransform>
中间的代码可以不用更改,因为他们都是一样的.
好了,再打开美工面板发现转换已经影响到了容器,好了,接下来就是做动画了.呵呵,如果要做的话,你只能先把代码改回原来的了.当然,你不改blend会帮你改的.因为RotateTransform的性能比LayoutTransform的性能要好.
先在面板上做好动画,可以先使用属性面板上的转换.
然后转到XAML代码.执行上面的操作,装RotateTransform改为LayoutTransform.改完后发现Blend出错了.因为时间线还没有改呢
找到对应的时间线,将RotateTransform也改为LayoutTransform,可是这时还是报错,为什么呢??
搞了半天才发现原来RotateTransform和LayoutTransform不是从一个类,RotateTransform在UIElement下,而
LayoutTransform是在FrameworkElement下的.
好了,接下来怎么做简单了吧,就是把时间线上对应的UIElement也改为FrameworkElement.
执行动画看看,当动画对象转换时是不是同时影响到了容器?
不知道还有没有其它更简单的方法,但现在我只发现这种笨办法.
我在网上看到很多人在讨论Flash和Silverlight哪个会占领以后的市场,其实我觉得吧,这可比性很小,Flash主要面向的是矢量动画的制作,做个网页小广告了,很好用,而Silverlight面向的却是网页元素.他有很多控件,可以做很漂亮的网站,虽然Flash也可以做到,但是却很费时间,还不能被搜索引擎搜到,而你让Silverlight来做网页小广告,呵呵,是不是也有点难度.在Silverlight里面也同样可以加入Flash动画,这样不是很好吗?(都是个人见解,各位见笑了)