Canvas.Left
, Canvas.Top
, Canvas.Right
и Canvas.Bottom
являются свойствами макета вместо свойств рендеринга. Четыре свойства используются для ограничения макета UIElements
, но не представляют состояния макета. Это поведение аналогично свойствам Width
и Height
.
<Grid>
<Button x:Name="DemoButton" />
</Grid>
См. Этот код выше, если мы прочитаем свойства Width
и Height
, мы обнаружим, что они оба double.NaN
. Только если мы прочитаем свойства ActualWidth
, ActualHeight
или RenderSize
, мы сможем получить правильные состояния макета.
То же, что 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
.