使用WPF touch,在下面显示的代码中,如果我强行此行而不是图像中显示的TryCast行,它将无法工作:
prizeWheel.RenderTransform.Angle += e.DeltaManipulation.Rotation
Visual Studio报告“角度”不是“转换”的成员,即使调试器显示在向下钻取中显示“角度”作为RenderTransform的一部分。我还注意到它表示'Angle'不是'Transform'的成员,即使我正在使用'RenderTransform'。
为什么'Angle'不能直接从'RenderTransform'作为Double访问?我在这里显然错过了一个基本概念。
答案 0 :(得分:1)
RenderTransform
属性是Transform
,它是一个抽象类。实际上,RenderTransform
可以是MatrixTransform
,RotateTransform
,也可以是众多其他人。请参阅文档here。
如果您想要访问Angle
,则需要将其转换为RotateTransform
。
答案 1 :(得分:1)
RenderTransform
属性的类型为Transform
,它是RotateTransform
的基类,不具有任何Angle
属性。
因此,必须将属性转换为RotateTransform
才能访问Angle
属性:
Dim rt = CType(prizeWheel.RenderTransform, RotateTransform)
If (rt IsNot Nothing) Then
rt.Angle += 1.0
End If
Visual Studio调试器知道内存中对象的实际类型在运行时的内容,因此可以显示其属性,但在编译时,您不需要'知道RenderTransform属性最终会在运行时返回RotateTransform
,这就是你需要进行转换的原因。
答案 2 :(得分:1)
在编译时,RenderTransform是一个Transform对象。这意味着您只能获得Transform公开的属性。
https://msdn.microsoft.com/en-us/library/system.windows.media.transform(v=vs.110).aspx
通过使用"morning","the"
,你告诉编译器“嘿,你认为变换的东西实际上是一个RotateTransform。”