Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как узнать координаты Grid-a?


Автор: jenik15 18.12.2009, 22:05
Подскажите, пожалуйста, как сделать следующее: Я хочу создать такую же фичу как в последнем Word, чтоб грид при приближении к нему мыши ставал прозрачней. Загвоздка и вопрос в том, как узнать координаты углов Grid-а относительно Grid Holder-a? А далее я просто буду узнавать расстояние от позиции мыши к ближайшему углу.

http://www.radikal.ru

Автор: tol05 18.12.2009, 22:39
Цитата(jenik15 @  18.12.2009,  21:05 Найти цитируемый пост)
Я хочу создать такую же фичу как в последнем Word, чтоб грид при приближении к нему мыши ставал прозрачней. 

1. Что подразумавается под "последний Word" ?
2. "при приближении" ???

Цитата(jenik15 @  18.12.2009,  21:05 Найти цитируемый пост)
как узнать координаты углов Grid-а относительно Grid Holder-a?

3. Что представляет из себя Grid Holder? Это иногда бывает важно..
4. Как Вы помещаете Grid в Grid Holder?

Автор: jenik15 18.12.2009, 22:59
Microsoft Office Word 2007. при отдалении от меню прозрачность угасает

http://www.radikal.ru

Grid Holder имеет тип Grid. 
Grid добавлен как дочерний к Grid Holder-у.
Позицию мыши я могу получаю так:

Код

private void gridHolder_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
            var position = e.GetPosition(this.gridHolder);
//Здесь нужна позиция углов дочернего gridHolder-у grid, чтоб получить
//растояние 
}


Автор: tol05 19.12.2009, 00:07
вам для решения задачи нужно только одно: знать, насколько указатель мыши удален от центра дочернего грида
причем равноудален

Код

private void gridHolder_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
            Point p = e.GetPosition(childGrid);

            Point center = new Point(childGrid.ActualWidth / 2, childGrid.ActualHeight / 2);
            Vector v = p - center;

            childGrid.Opacity = childGrid.ActualWidth/v.Length; 
}

Автор: jenik15 19.12.2009, 13:41
Спасибо с прозрачностью это работает отлично. Только есть еще одна задача, что требует получить расстояние относительно родительского Gridholder-а. При приближении мыши к дочернему grid мне нужно узнать, где будет выгодней его разместить в верхнем левом углу или в верхнем правом. А это требует, как я понимаю узнать расстояние относительно родительского grid-a.

Идея такова при приближении прозрачность угасает, а если приблизить слишком близко так будет принято решение о перемещении grid.

Автор: tol05 19.12.2009, 16:43
я не очень понял мысль.
Цитата(jenik15 @  19.12.2009,  12:41 Найти цитируемый пост)
При приближении мыши к дочернему grid мне нужно узнать, где будет выгодней его разместить в верхнем левом углу или в верхнем правом.

что именно разместить? дочерний грид уже размещен в родительском, как я понимаю. Тем не менее... 

Вы можете узнать координаты любой точки дочернего элемента относительно его родителя так:
Код

Point leftTop = childGrid.TranslatePoint(new Point(0, 0), grid);//левый верхний угол дочернего грида
Point rightBottom = childGrid.TranslatePoint(new Point(childGrid.ActualWidth, childGrid.ActualWidth), grid); //правый нижний угол дочернего грида
//проверка
Point parentMousePoint = e.GetPosition(grid);
Title = string.Format("rightBottom.X={0} rightBottom.Y={1} parent.X={2} parent.Y={3}", rightBottom.X, rightBottom.Y, parentMousePoint.X, parentMousePoint.Y);

Автор: jenik15 20.12.2009, 00:50
Цитата

что именно разместить? дочерний грид уже размещен в родительском, как я понимаю. Тем не менее..

Хоть он и размещен, но горизонтальное и вертикальное положение я ему могу задать.
 smile 

Огромное спасибо. 

Код

Point leftTop = childGrid.TranslatePoint(new Point(0, 0), grid);


именно то, что мне нужно.

Автор: tol05 20.12.2009, 10:01
тогда он не "размещен", а "помещен" ) Размещение подразумевает позиционирование.   

не за что 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)