Главная » Разработка для Windows Phone 7 » Видимость и компоновка Windows Phone 7

0

Класс UIElement определяет свойство Visibility (Видимость), которое удобно использовать для временного сокрытия элементов. Но это свойство не типа Boolean. Visibility типа Visibility. Это перечисление, включающее два члена: Visible (Видимый) и Collapsed (Свернутый).

Вернемся к предыдущему приложению и зададим Visibility для одного из элементов:

<TextBlock Text="Left, Top, ZIndex" Visibility="Collapsed" />

Для разделения столбцов используется параметр Margin:

Значение Collapsed означает, что элемент имеет нулевой размер, т.е. фактически не принимает участия в компоновке. В некоторых случаях именно такое поведение и требуется, но в данной ситуации это приводит к тому, что строки таблицы выстраиваются неверно:

Если требуется скрыть элемент, сохранив его размер и роль в компоновке, используется свойство Opacity:

<TextBlock Text="Left, Top, ZIndex" Opacity="0M />

Теперь TextBlock невидимый, но его размер остается прежним:

Такой подход можно считать почти правильным. Единственная проблема в том, что TextBlock продолжает реагировать на сенсорный ввод. Если требуется скрыть его как из виду, так и от касаний, используйте следующее:

<TextBlock Text="Left, Top, ZIndex" Opacity="0"

IsHitTestVisible=MFalse" />

Для целей компоновки свойство Opacity далеко не так эффективно, как Visibility, поэтому следует избегать его использования в случаях, требующих частой смены компоновки.

(Причина того, что Visibility не типа Boolean, в Windows Presentation Foundation. В WPF перечисление Visibility включает еще один, третий член, под именем Invisible (Невидимый), который обеспечивает визуальное сокрытие элемента с сохранением его размера для целей компоновки.)

Свойства Visibility и Opacity применяются к элементу и его дочерним элементам, поэтому если задать эти свойства для панели, их действие распространится и на дочерние элементы панели.

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

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии