Effetto Reflection con i VisualBrush di WPF
Qualche tempo ho parlato dei ColorBrush di WPF.
Un altro tipo di Brush molto utile sono i VisualBrush che ci permettono di disegnare con WPF utilizzando come riempimento un qualsiasi oggetto visuale (Button, ComboBox, TextBox, Page , etc).
<Rectangle Height="200" Width="250">
<Rectangle.Fill>
<VisualBrush>
<VisualBrush.Visual>
<ComboBox Height="30" Width="100"/>
</VisualBrush.Visual>
</VisualBrush>
</Rectangle.Fill>
</Rectangle>
Come vedete, quindi, il riempimento del rettangolo è una semplice ComboBox che, però, perde le sue funzionalità.
Un esempio tipico di utilizzo di un VisualBrush è quello di un effetto "Riflesso".
Questo tipo di operazione in WPF è davvero semplice.
<Window x:Class="ReflectionVisualTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ReflectionVisualTest" Height="600" Width="800"
>
<Window.Background>
<LinearGradientBrush StartPoint="0,0.3" EndPoint="1,0">
<LinearGradientBrush.GradientStops>
<GradientStop Color="#C4CBD8" Offset="0" />
<GradientStop Color="#E0E4F0" Offset="0.3" />
<GradientStop Color="#E6EAF5" Offset="0.5" />
<GradientStop Color="#CFD7E2" Offset="0.9" />
<GradientStop Color="#C4CBD8" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Window.Background>
<Grid>
<StackPanel Margin="10">
<Border BorderBrush="White" BorderThickness="4" Width="408" Height="308">
<Image Source="gallo.jpg" Width="400" Height="300" Name="myVisual" />
</Border>
<Border Width="408" Height="308" Opacity="0.2" BorderBrush="White" BorderThickness="4">
<Border.OpacityMask>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black"/>
<GradientStop Offset=".6" Color="Transparent"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.OpacityMask>
<Border.Background>
<VisualBrush Visual="{Binding ElementName=myVisual}">
<VisualBrush.Transform>
<ScaleTransform ScaleX="1" ScaleY="-1" CenterX="200" CenterY="150" />
</VisualBrush.Transform>
</VisualBrush>
</Border.Background>
</Border>
</StackPanel>
</Grid>
</Window>
Viene, innanzitutto, creato un oggetto Image e successivamente viene utilizzato questo (con l'utilizzo del binding di wpf) come Brush riflesso e con un OpacityMask per l'effetto trasparenza.
Più facile di cosi....
Technorati Tags: Windows Presentation Foundation VisualBrush