VisualBrush

40

VisualBrush — необычная разновидность кисти, позволяющая брать визуальное содержимое элемента и использовать его для заполнения любой поверхности. Например, с помощью VisualBrush можно скопировать внешний вид кнопки из окна в любую другую область того же окна. Однако копия кнопки не будет реагировать на щелчки или проявлять какую-либо другую интерактивность. Это просто копия внешнего вида элемента.

Например, следующий фрагмент разметки определяет кнопку и кисть VisualBrush, дублирующую эту кнопку:

<StackPanel>
      <Button Name="cmd" Margin="5" Padding="5">Это кнопка?</Button>
      <Rectangle Margin="5" Height="30">
             <Rectangle.Fill>
                    <VisualBrush Visual="{Binding ElementName=cmd}"></VisualBrush>
             </Rectangle.Fill>
      </Rectangle>
</StackPanel>

Хотя можно самостоятельно определить элемент, который должна использовать кисть VisualBrush, намного чаще применяется выражение привязки для ссылки на элемент в текущем окне, как это сделано в приведенном примере. На рисунке показана исходная кнопка (в верхней части окна) и область, которая закрашена посредством кисти VisualBrush, основанной на внешнем виде этой кнопки:

Копирование визуального представления кнопки

VisualBrush отслеживает изменения во внешнем виде элемента. Например, если был скопирован внешний вид кнопки, а затем эта кнопка получит фокус, то VisualBrush перерисует область заполнения, отобразив сфокусированную кнопку. Кисть VisualBrush унаследована от TileBrush, поэтому она также поддерживает средства сжатия, растяжения и переворачивания, о которых говорилось в предыдущем разделе. Скомбинировав эти детали с рассматриваемыми далее трансформациями, можно легко применять VisualBrush для получения содержимого элемента и манипулировать им до неузнаваемости.

Поскольку содержимое VisualBrush не интерактивно, может возникнуть вопрос: для чего вообще нужна такая кисть? На самом деле VisualBrush полезна во многих ситуациях, когда требуется создать статическое содержимое, дублирующее "реальное", расположенное где-то в другом месте.

Например, можно взять элемент, который содержит в себе значительное количество вложенных элементов (даже целое окно), сжать его до меньших размеров и использовать в качестве активного предварительного представления. Некоторые программы, работающие с документами, используют это для показа форматирования. Браузер Internet Explorer применяет это средство для предварительного просмотра документов в представлении "Быстрые вкладки" (открывающегося по нажатию <Ctrl+Q>), а ОС Windows — для эскизного представления различных приложений в панели задач.

Кисть VisualBrush допускается использовать в комбинации с анимацией для создания определенных эффектов (таких как миниатюрное изображение документа под главным окном приложения). VisualBrush также является основой одного из распространенных эффектов WPF, которым часто злоупотребляют — активного отражения, которое будет продемонстрировано в следующем разделе (и еще худшего — отражения видеосодержимого).

Пройди тесты
Лучший чат для C# программистов