Para mostrar um pouco do poder do data binding (ligação de dados – para ver mais, dê uma olhada aqui) no WPF, vamos criar uma lista de fontes do sistema.

Esta lista mostra todos os fontes instalados e mostra um exemplo do texto quando selecionamos um dos fontes da lista.

No XamlPad (se você não tiver instalado o Windows SDK, pode usar outro editor XAML, como o XamlCruncher ou o KaXaml), digite o seguinte código:

<Window 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.5*"/>
            <ColumnDefinition Width="0.5*"/>
        </Grid.ColumnDefinitions>
        <ListBox HorizontalAlignment="Stretch"
           Margin="0,0,5,0" x:Name="ListBox"
           VerticalAlignment="Stretch" 
           ItemsSource="{Binding Source={x:Static
           Fonts.SystemFontFamilies}}" 
           IsSynchronizedWithCurrentItem="True"/>
        <GridSplitter HorizontalAlignment="Right"
           VerticalAlignment="Stretch" Width="5"/>
        <TextBox HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch"
          FontFamily="{Binding Path=SelectedItem,
          ElementName=ListBox, Mode=Default}"
          FontSize="48" Grid.Column="1"
          Text="The quick brown fox jumps over the lazy dog"
          TextWrapping="Wrap"/>
    </Grid>
</Window>

Pronto. Ao teclar F5 (ou F7, no XamlCruncher) você tem uma nova janela que mostra todos os fontes do sistema.

image

O segredo está nos seguintes códigos:

ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" 

FontFamily="{Binding Path=SelectedItem, ElementName=ListBox, Mode=Default}"

O primeiro liga os itens da ListBox à coleção SystemFontFamilies da classe Fonts da CLR e a segunda liga o nome do fonte da caixa de texto ao item selecionado da ListBox.

Fácil, não? Isto é só um pequeno exemplo do que pode ser feito…

Leave a Reply

Your email address will not be published. Required fields are marked *

Post Navigation