C# Canvas getRight方法返回Nan
我有一个矩形,我正试图拖放到画布中。完成拖动后,我想得到左、上、右和下坐标。因此,当我说Canvas.GetRight(dragableThumb)和Canvas.GetBottom(dragableThumb)时,两个值都返回NaN 所以对于右派和底层,我是这样说的,但问题是我得到了错误的值。请帮忙 var right=this.Width-left-dragableThumb.ActualWidth; var bottom=此.Height-top-dragableThumb.ActualHeight 这是完整的代码 xaml: 应该是:C# Canvas getRight方法返回Nan,c#,wpf,canvas,C#,Wpf,Canvas,我有一个矩形,我正试图拖放到画布中。完成拖动后,我想得到左、上、右和下坐标。因此,当我说Canvas.GetRight(dragableThumb)和Canvas.GetBottom(dragableThumb)时,两个值都返回NaN 所以对于右派和底层,我是这样说的,但问题是我得到了错误的值。请帮忙 var right=this.Width-left-dragableThumb.ActualWidth; var bottom=此.Height-top-dragableThumb.ActualH
var right = left + dragableThumb.ActualWidth;
var bottom = top + dragableThumb.ActualHeight;
应该是:
var right = left + dragableThumb.ActualWidth;
var bottom = top + dragableThumb.ActualHeight;
Canvas.Left
、Canvas.Top
、Canvas.Right
和Canvas.Bottom
是布局属性,而不是渲染属性。这四个属性用于限制ui元素的布局
,但不表示布局状态,此行为与宽度
和高度
属性相同
查看上面的代码,如果我们阅读Width
和Height
属性,我们会发现它们都是double.NaN
。只有读取实际宽度
、实际高度
或渲染
属性,才能获得正确的布局状态
与Canvas.Left
、Canvas.Top
、Canvas.Right
和Canvas.Bottom
属性相同。您可以使用其他方法获取右侧和底部,例如:
var right=Canvas.GetLeft(dragableThumb)+dragableThumb.ActualWidth;
var bottom=Canvas.GetTop(dragableThumb)+dragableThumb.ActualHeight;
如果您想要一种适用于所有其他情况的方法,可以尝试以下代码:
var bounds = new Rect(
dragableThumb.TranslatePoint(default, DragableCanvas),
dragableThumb.TranslatePoint(new Point(dragableThumb.ActualWidth, dragableThumb.ActualHeight), DragableCanvas));
var right = bounds.Right;
var bottom = bounds.Bottom;
顺便说一下,您拼写错误的
dragable
。正确的拼写是draggable
Canvas.Left
、Canvas.Top
、Canvas.Right
和Canvas.Bottom
是布局属性,而不是渲染属性。这四个属性用于限制ui元素的布局
,但不表示布局状态,此行为与宽度
和高度
属性相同
查看上面的代码,如果我们阅读Width
和Height
属性,我们会发现它们都是double.NaN
。只有读取实际宽度
、实际高度
或渲染
属性,才能获得正确的布局状态
与Canvas.Left
、Canvas.Top
、Canvas.Right
和Canvas.Bottom
属性相同。您可以使用其他方法获取右侧和底部,例如:
var right=Canvas.GetLeft(dragableThumb)+dragableThumb.ActualWidth;
var bottom=Canvas.GetTop(dragableThumb)+dragableThumb.ActualHeight;
如果您想要一种适用于所有其他情况的方法,可以尝试以下代码:
var bounds = new Rect(
dragableThumb.TranslatePoint(default, DragableCanvas),
dragableThumb.TranslatePoint(new Point(dragableThumb.ActualWidth, dragableThumb.ActualHeight), DragableCanvas));
var right = bounds.Right;
var bottom = bounds.Bottom;
顺便说一下,您拼写错误的dragable
。正确的拼写是draggable