Olá, tudo bom?
Neste post vou demonstrar como utilizar o VisualStateManager para ajustar/adaptar a interface do usuário a diferentes tamanhos de tela.
Como base para nosso exemplo, utilizaremos o seguinte trecho de código XAML para composição do layout da aplicação de teste:
<Page
x:Class="TesteVisualStateManager.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TesteVisualStateManager"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel x:Name="contentPanel" Margin="8,32,0,0">
<TextBlock Text="Blog do Eduardo H. Rizo" FontSize="30" />
<TextBlock Text="Teste com o VisualStateManager" FontSize="20" />
<TextBlock Text="Informe seu nome:" Margin="0,40,0,0" />
<StackPanel Orientation="Horizontal" x:Name="inputPanel" Margin="0,20,0,20">
<TextBox x:Name="txtNome" Width="280" HorizontalAlignment="Left"/>
<Button x:Name="btnDigaOla" Content="Diga Olá..." />
</StackPanel>
</StackPanel>
</Grid>
</Page>
Ao executarmos o projeto simulando seu uso em um computador local ou tablet teremos a seguinte visualização:

Porém, ao executar o mesmo projeto em um Windows Phone, cuja tela obviamente é menor, veremos que o botão “Diga Olá” ficará cortado e não ajustado à nova realidade da tela.

Para resolver a situação podemos usar o recurso do VisualStateManager e criar uma AdaptativeTrigger que será disparada sempre que a aplicação perceber situações diferentes de resolução ou tamanho de tela. Repare o trecho de código XAML abaixo:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="wideState"> <!-- Estado amplo (tablet / PC) -->
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="641" />
</VisualState.StateTriggers>
</VisualState>
<VisualState x:Name="narrowState"> <!-- Estado estreito (entre 0 e 641) -->
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="inputPanel.Orientation" Value="Vertical"/>
<Setter Target="btnDigaOla.Margin" Value="0,4,0,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
A codificação acima informa para a página XAML que se ela estiver em um tamanho entre 0 (zero) e 641 então deverá utilizar as adaptações indicadas no VisualState de nome narrowState, caso contrário, deve utilizar a própria codificação já indicada pelo desenvolvedor, ou seja, o código original.

Veja agora a codificação completa da página:
<Page
x:Class="TesteVisualStateManager.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TesteVisualStateManager"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="wideState"> <!-- Estado amplo (tablet / PC) -->
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="641" />
</VisualState.StateTriggers>
</VisualState>
<VisualState x:Name="narrowState"> <!-- Estado estreito (entre 0 e 641) -->
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="inputPanel.Orientation" Value="Vertical"/>
<Setter Target="btnDigaOla.Margin" Value="0,4,0,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<StackPanel x:Name="contentPanel" Margin="8,32,0,0">
<TextBlock Text="Blog do Eduardo H. Rizo" FontSize="30" />
<TextBlock Text="Teste com o VisualStateManager" FontSize="20" />
<TextBlock Text="Informe seu nome:" Margin="0,40,0,0" />
<StackPanel Orientation="Horizontal" x:Name="inputPanel" Margin="0,20,0,20">
<TextBox x:Name="txtNome" Width="280" HorizontalAlignment="Left"/>
<Button x:Name="btnDigaOla" Content="Diga Olá..." />
</StackPanel>
</StackPanel>
</Grid>
</Page>
Abraços,
Eduardo Henrique Rizo

Fonte:
Post Relacionado:
![]()
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Pingback: Free: Curso Windows Phone – Vários tópicos | Blog do Eduardo H. Rizo
Olá ! Tudo bem?
Muito bom teu blog ! Conteúdos interessantes e dinâmicos.
Gostaria da sua ajuda. Tenho muita vontade de começar a desenvolver apps para Windows, talvez até universalmente. Não somente por ser fã da plataforma, mas, por ter grande carência de apps. E futuramente vejo isso como algo rentável. Mas, sou inexperiente nesse universo da programação, nunca me interessei até agora. E depois de muita pesquisa, observei que programação é o futuro, a base de toda tecnologia, digamos assim, então quem sabe programar, esta bem. Poderia me passar teu email, gostaria de trocar umas ideias contigo, um tira duvidas. Okay ? ! Abraço
Olá ! Tudo joia ?
Muito bom teu blog, está de parabéns. Especialmente, não vemos muitos artigos como estes relacionados ao Windows em geral. Gostaria de trocar uma ídeia contigo, creio que como é mais experiente na área, poderá me dar uma ajuda. Poderia me passar teu e-mail ?
Obrigado amigo 😉
Bom dia !!!!!
Olá, tudo bom?
Meu e-mail é eduardo@eduardorizo.com.br
Abraços,
Eduardo H. Rizo