Visão Geral do Uso de Layout Automático
Este tópico apresenta orientações para desenvolvedores sobre como escrever aplicações Windows Presentation Foundation (WPF) com interfaces de usuário (UIs) localizáveis. No passado, a localização de um UI era um processo que consumia muito tempo. Cada linguagem para a qual a UI fosse adaptada requeria um ajuste pixel a pixel. Hoje em dia com o design correto e direita padrões de codificação, UIs pode ser construído para que os localizadores tenham menor redimensionamento e reposicionamento a fazer. A abordagem para escrever aplicativos que podem ser mais com com facilidade redimensionados e reposicionados é chamada layout automático e pode ser alcançado usando WPF design de aplicativo.
Este tópico contém as seguintes seções.
Vantagens de Utilizar Layout Automático
Layout Automático e Controles
Layout Automático e Padrões de Código
Layout Automático e Grades
Layout Automático e Grades Utilizando a Propriedade IsSharedSizeScope
Tópicos relacionados
Vantagens de Utilizar Layout Automático
Porque o sistema de apresentação do WPF é poderoso e flexível, ele fornece a capacidade de dispor os elementos em uma aplicação que possam ser ajustados para satisfazer os requisitos de diferentes idiomas. A lista a seguir aponta algumas vantagens do layout automático.
UI exibe bem em qualquer idioma.
Reduz a necessidade de reajustar a posição e tamanho dos controles após o texto ser traduzido.
Reduz a necessidade de reajustar o tamanho da janela.
O layout da UI renderiza adequadamente em qualquer idioma.
A localização pode ser reduzida a ponto de não ser muito mais do que tradução de string.
Layout Automático e Controles
Layout automático permite que uma aplicação ajuste o tamanho de um controle automaticamente. Por exemplo, um controle pode mudar para acomodar o tamanho de um string. Essa capacidade permite a localizadores traduzirem o string; eles não mais precisam redimensionar o controle para que o texto traduzido caiba nele. O exemplo a seguir cria um botão com conteúdo em inglês.
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonLoc.Pane1"
Name="myWindow"
SizeToContent="WidthAndHeight"
>
<DockPanel>
<Button FontSize="28" Height="50">My name is Hope.</Button>
</DockPanel>
</Window>
No exemplo tudo o que você tem que fazer para fazer um botão em espanhol é mudar o texto. Por exemplo,
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonLoc.Pane1"
Name="myWindow"
SizeToContent="WidthAndHeight"
>
<DockPanel>
<Button FontSize="28" Height="50">Me llamo Esperanza.</Button>
</DockPanel>
</Window>
O gráfico a seguir mostra a saída do código de exemplo:
Botão Autorredimensionável
Observação: |
---|
Para o exemplo completo do qual foram extraídos exemplos anteriores, consulte: Layout automático para traduzível exemplo de aplicativos. |
Layout Automático e Padrões de Código
Utilizar a abordagem de layout automático requer um conjunto de padrões e regras de codificação e design para produzir uma UI completamente localizável. As seguintes orientações ajudaram sua codificação de layout automático.
Padrões de Código |
Descrição |
---|---|
Não utilize posições absolutas. |
|
Não estabeleça um tamanho fixo para uma janela. |
|
Acrescente um FlowDirection. |
|
Use fontes compostas em vez de fontes físicas. |
|
Acrescente xml:lang. |
|
Layout Automático e Grades
O elemento Grid é útil para layout automático porque ele permite que um desenvolvedor posicione elementos. Um controle Grid é capaz de distribuir o espaço disponível entre seus elementos filhos que são organizados em colunas e linhas e posicionar elementos da UI em cada célula. Os elementos da UI podem ultrapassar múltiplas células, e é possível que haja grades dentro de grades. Grades são úteis porque permitem criar e posicionar UI complexa. O exemplo a seguir demonstra como utilizar uma grade para posicionar alguns botões e texto. Observe que a altura e a largura das células são definidas como Auto; portanto, a célula que contém o botão com uma imagem ajusta para encaixar a imagem.
<Grid Name="grid" ShowGridLines ="false">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="0" FontSize="24">Grid
</TextBlock>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="1" FontSize="12"
Grid.ColumnSpan="2">The following buttons and text are positioned using a Grid.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="2" Background="Pink"
BorderBrush="Black" BorderThickness="10">Button 1
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="2" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Sets the background
color.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="3" Foreground="Red">
Button 2
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="3" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Sets the foreground
color.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="4">
<Image Source="data\flower.jpg"></Image>
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="4" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Adds an image as
the button's content.
</TextBlock>
</Grid>
O gráfico a seguir mostra a grade produzida pelo código anterior.
Grid
Observação: |
---|
Para a amostra de código completo, consulte Grade de exemplo de aplicativos traduzível. |
Layout Automático e Grades Utilizando a Propriedade IsSharedSizeScope
Grades são úteis em aplicações localizáveis para criar controles que se ajustam para encaixar conteúdo. Entretanto, às vezes você quer que controles mantenham um tamanho particular em qualquer contexto. Por exemplo, se você tem botões "OK", "Cancel" e "Browse" você provavelmente não quer que os botões sejam redimensionados conforme o conteúdo. Nesse caso a propriedade IsSharedSizeScope do elemento Grid é útil para compartilhar o mesmo tamanho entre múltiplos elementos da grade. O exemplo a seguir demonstra como compartilhar dados de tamanho de colunas e linhas entre múltiplos elementos Grid.
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Button Click="setTrue" Margin="0,0,10,10">Set IsSharedSizeScope="True"</Button>
<Button Click="setFalse" Margin="0,0,10,10">Set IsSharedSizeScope="False"</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Grid ShowGridLines="True" Margin="0,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0" Width="200" Height="100"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0" Width="150" Height="100"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
</StackPanel>
<TextBlock Margin="10" DockPanel.Dock="Top" Name="txt1"/>
Observação Para o exemplo de código completo, veja Como: Compartilhar Propriedades de Dimensionamento Entre Grades.
Consulte também
Tarefas
Como: Usar Layout automático para criar um botão
Como: Usar uma Grade para Conseguir Automático