如何防止Silverlight将TransformGroup转换为MatrixTransform?

时间:2014-06-23 20:25:00

标签: c# silverlight

我创建了一个包含多个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

1 个答案:

答案 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;