我的代码是
Double x= 400.002015366677,y =300.000014;
Point point = new Point(x,y);
在此上面的点坐标值在WPF中正确设置 但在UWP中,值已更改。其值为400.0020141601525 和300。
如何在uwp中获取point的原始值?
感谢,,
答案 0 :(得分:0)
与WPF中使用的Point Structure不同,UWP中的Point structure是一个Windows运行时结构,位于Windows.Foundation命名空间下,可以在.NET,C ++和JavaScript中使用。
如果我们查看Fields of Point structure,我们会发现这些字段使用的数据类型如下:
数字 [JavaScript] | System.Single [.NET] | float32 [C ++]
在内部,该值存储为单精度32位数。但是,在使用Microsoft .NET语言时,Point的数据成员公开为double
属性,而不是字段。
备注的参考投影和积分部分:
如果您使用的是Microsoft .NET语言(C#或Microsoft Visual Basic)或Visual C ++组件扩展(C ++ / CX),那么Point可以使用非数据成员,并且其数据成员以读写方式公开属性,而不是字段。 .NET通过System.Runtime.WindowsRuntime.dll互操作程序集支持此功能,该程序集作为.NET for Windows运行时应用程序的一部分提供。
因此,在使用C#或Visual Basic时,我们使用接受两个Point.Point constructor参数的System.Double。对于C#或Visual Basic,Point.X和Point.Y属性的数据类型也是System.Double
。
您的代码中发生的情况是,在初始化时,您的x
和y
值会首先转换为System.Single
,并且在检索属性时,会再次转换为System.Double
像:
Double x = 400.002015366677, y = 300.000014;
Double X = Convert.ToDouble(Convert.ToSingle(x)); //X is 400.00201416015625
Double Y = Convert.ToDouble(Convert.ToSingle(y)); //Y is 300
对于Point structure,我担心我们无法获得准确的原始值。 Point通常用于UI定位和渲染。在这种情况下,建议使用整数值。
点的X 和 Y 可以是非整数值。然而,这可以引入子像素渲染的可能性,其可以改变颜色并消除沿着子像素边缘的任何直线的混叠。这就是XAML渲染引擎如何处理子像素边界。因此,为了获得最佳结果,请在声明用于UI定位和渲染的坐标和形状时使用整数值。
如果您确实需要双倍值,我建议您定义新结构,不要使用Point。