我创建了一个包含多个TransformGroup
的{{1}},并将其分配给Transform
的{{1}}媒体资源:
Image
如果我想在WPF中从这个组中获得单独的转换,我可以这样做:
RenderTransform
但是,在Silverlight中,这个TransformGroup group = new TransformGroup();
ScaleTransform st = new ScaleTransform();
group.Children.Add(st);
TranslateTransform tt = new TranslateTransform();
group.Children.Add(tt);
image.RenderTransform = group;
显然已隐式转换为TranslateTransform tt = (TranslateTransform)((TransformGroup)image.RenderTransform).Children.First(tr => tr is TranslateTransform);
,因为运行上面的代码会出错:
无法转换类型为#System; Winds.Media.MatrixTransform'的对象输入' System.Windows.Media.TransformGroup'。
有没有办法避免从TransformGroup
转换为MatrixTransform
?如果没有,我如何从TransformGroup
恢复单个MatrixTransform
?
答案 0 :(得分:1)
d'哦!在分配之前,我偶然尝试使用TransformGroup
,因此image.RenderTransform
仍然设置为MatrixTransform
的默认值。
如果有人需要使用MatrixTransform
执行ScaleTransform
后跟TranslateTransform
,则会给出以下转换:
ScaleTransform st = new ScaleTransform();
TranslateTransform tt = new TranslateTransform();
以下两个选项应提供相同的结果:
使用TransformGroup
:
TransformGroup group = new TransformGroup();
group.Children.Add(st);
group.Children.Add(tt);
image.RenderTransform = group;
使用MatrixTransform
:
MatrixTransform mt = new MatrixTransform
{
Matrix = new Matrix
{
M11 = st.ScaleX,
M22 = st.ScaleY,
OffsetX = tt.X,
OffsetY = tt.Y
}
};
image.RenderTransform = mt;