2015-01-16 3 views
2

У меня есть страница xaml, на которую я положил прямоугольник на сетке (сетка покрывает весь экран). Как мне получить координаты верхнего левого угла Rectangle?Rectangle UI на Windows Phone приложение?

Xaml класс:

<Page 
x:Class="JunkyJunk.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:JunkyJunk" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

<Canvas> 
    <Rectangle x:Name="TestRectangle" 
       Fill="#FFF4F4F5" 
       HorizontalAlignment="Left" 
       Height="100" 
       Stroke="Black" 
       VerticalAlignment="Top" 
       Width="100" 
       Loaded="TestRectangle_Loaded" Canvas.Left="137" Canvas.Top="245"/> 
</Canvas> 

Так что давайте просто сказать, что я просто поместить этот прямоугольник на холсте (изменил его из сетки). Как получить координаты верхнего левого угла прямоугольника?

Thanks

+1

Может быть, вы должны поставить прямоугольник внутри Canvas вместо сетки .. Canvas может позволить вам расположить прямоугольник, основанный на координатах – bit

+0

могли бы вы разместить код вашего зрения XAML? –

+0

Я добавил свой код xaml. – DigitalMath

ответ

2

Понял.

double x = Canvas.GetLeft(TestRectangle); 
double y = Canvas.GetTop(TestRectangle); 
0

Вы можете использовать GeneralTransform преобразовать точку или прямоугольник из одной системы координат UIElement к чужому.

Координаты верхнего левого угла прямоугольника всегда будут равны 0,0 в координатах прямоугольника, поэтому, если вы переводите их в координаты вашего холста, вы можете посмотреть новое значение, чтобы увидеть, где находится Rect.

Это будет работать с любыми двумя UIElements, поэтому вы можете сохранить свою сетку и не полагаться на Canvas.Left и Canvas.Top.

// Rectangle's bounds in its own coordinates 
Rect testRectLocalBounds = new Rect(0, 0, TestRectangle.ActualWidth, TestRectangle.ActualHeight); 

// Transforms from TestRectangle's to this page's and to TestCanvas' coordinates 
GeneralTransform transformToPage = TestRectangle.TransformToVisual(this); 
GeneralTransform transformToCanvas = TestRectangle.TransformToVisual(TestCanvas); 

// TestRectangle's boundaries in the Page's and Canvas' coordinates 
Rect testRectPageBounds = transformToPage.TransformBounds(testRectLocalBounds); 
Rect testRectCanvasBounds = transformToCanvas.TransformBounds(testRectLocalBounds); 

Debug.WriteLine("Rect relative to page: {0} to canvas: {1}", testRectPageBounds, testRectCanvasBounds); 
+0

Хорошо, я тоже попробую. – DigitalMath

Смежные вопросы