Nel precedente post ho accennato ad alcuni tipi di Brush disponibili in WPF, volutamente non ho indicato quello più interessante che è VisualBrush ovvero una Brush che può contenere tutto ciò che eredita da Visual, in pratica quesi tutto quello che è possibile includere in una user interface WPF.
In pratica possiamo decidere di usare come colore di sfondo di un controllo, un altro controllo o un insieme di Controlli/Visual.
Modificando dinamicamente attraverso Databinding lo sfondo disegnato mediante VisualBrush si possono ottenere effetti interessanti, queste poche righe di XAML mostrano due Texbox, quella sulla destra mostra il contenuto speculare della texbox di sinistra.

 

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
  </Grid.ColumnDefinitions>
  <TextBox Text="Hello" Grid.Column="0" Height="30" Name="txt1" FontSize="14" Foreground="Blue"/>
    <StackPanel Grid.Column="1" VerticalAlignment="Center" Height="30" LayoutTransform="-1 0 0 1 0 0" >
      <StackPanel.Background>
        <VisualBrush Visual="{Binding ElementName=txt1}" />
      </StackPanel.Background>
    </StackPanel>
</Grid>

La Textbox sulla parte destra non esiste ma è il risultato del disegnare lo sfondo dello StackPanel attraverso un VisualBrush la cui fonte è la Textbox sulla sinistra.