VisualBrush
40WPF --- Графика и анимация WPF --- VisualBrush
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, которым часто злоупотребляют — активного отражения, которое будет продемонстрировано в следующем разделе (и еще худшего — отражения видеосодержимого).