2010-11-04 2 views
2

Какое лучшее решение для проверки - это один элемент управления, расположенный над другим.Silverlight, WPF. Как определить один элемент управления, расположенный над другим?

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

И мне нужно определить, что этот cotnrols наложен, прежде чем я добавлю их в дерево visul!

ответ

3

Предполагаете, вы хотите знать, хотите ли вы наложить их на размер Z?

Непроверенные:

// requires System.Windows.Controls.Toolkit.dll 

using System.Windows.Controls.Primitives; 
// ... 

Rect? rect1 = myControl1.GetBoundsRelativeTo(someParentContainer); 
Rect? rect2 = myControl2.GetBoundsRelativeTo(someParentContainer); 

bool areIntersecting = rect1 != null && rect2 != null 
    && rect1.Value.Intersect(rect2.Value) != Rect.Empty; 
+0

Спасибо, за ответ. Да, это то, что я ищу. Но я не могу использовать любые наборы инструментов, просто такое требование. Является ли ясным WPF, я могу найти что-то подобное? – Evgeny

+1

@Evgeny, инструментарий с открытым исходным кодом, вы найдете реализацию для 'GetBoundsRelativeTo (...)' здесь: http://silverlight.codeplex.com/SourceControl/changeset/view/56962#779713 – herzmeister

+0

У меня есть исключение : Указанный Visual и этот Visual не имеют общего предка, поэтому нет действительного преобразования между двумя Visual. – Evgeny

-1

Если вы после того, как инструмент, а не программного решения, snoop делает это для WPF приложений. Он показывает вам иерархическое представление о составе элементов управления в вашем приложении во время выполнения.

Никогда не использовал его, но Silverlight Spy, похоже, эквивалентен Silverlight.

+1

А, я вижу, вы отредактировали вопрос. Понятно, что вы хотите это программно. Ну что ж. – serg10

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