使用WPF touch为什么某些属性无法直接访问?

时间:2017-01-27 21:47:52

标签: wpf vb.net

使用WPF touch,在下面显示的代码中,如果我强行此行而不是图像中显示的TryCast行,它将无法工作:

prizeWheel.RenderTransform.Angle += e.DeltaManipulation.Rotation

Visual Studio报告“角度”不是“转换”的成员,即使调试器显示在向下钻取中显示“角度”作为RenderTransform的一部分。我还注意到它表示'Angle'不是'Transform'的成员,即使我正在使用'RenderTransform'。

为什么'Angle'不能直接从'RenderTransform'作为Double访问?我在这里显然错过了一个基本概念。

enter image description here

3 个答案:

答案 0 :(得分:1)

RenderTransform属性是Transform,它是一个抽象类。实际上,RenderTransform可以是MatrixTransformRotateTransform,也可以是众多其他人。请参阅文档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。”

相关问题