为什么Rect.Top小于Bottom?

时间:2017-07-24 12:49:55

标签: c# wpf

Rect r = new Rect(new Point(0, 0), new Point(-1, -1));
var check = r.Top > r.Bottom; //false, Top is -1

我想,Top应该比Bottom更大。为什么不是这样?

3 个答案:

答案 0 :(得分:2)

您似乎认为new Rect(new Point(0, 0), new Point(-1, -1))会创建一个负宽度和高度的Rect。事实并非如此。

事实上,正如online documentation中提到的那样,

  

初始化一个Rect结构的新实例,该实例的大小足以包含两个指定的点。

查看该构造函数的source code可以看出它是如何工作的。

public Rect(Point point1, Point point2)
{
    _x = Math.Min(point1._x, point2._x);
    _y = Math.Min(point1._y, point2._y);

    //  Max with 0 to prevent double weirdness from causing us to be (-epsilon..0)
    _width = Math.Max(Math.Max(point1._x, point2._x) - _x, 0);
    _height = Math.Max(Math.Max(point1._y, point2._y) - _y, 0);
}

答案 1 :(得分:1)

大多数计算机图形中的点(0,0)位于左上角,而下面的y点坐标越高。当你走到右边时,与x坐标相同。

答案 2 :(得分:1)

它帮助我:仔细阅读MSDN文档(https://msdn.microsoft.com/en-us/library/ms587931(v=vs.110).aspx):

  

初始化一个非常大的Rect结构的新实例   足以包含两个指定的点。

这意味着,第一个点不是强制性的左下角,第二个是右上角,反之亦然。这取决于点(我想说,左/下和右/顶点与构造函数的参数不一样).. 在你的情况下,左/下点是(-1,0),右/上是(0,-1)=>的底= 0 ;的顶= -1