WPF
- Apresentando o controle Viewbox
Neste artigo eu continuo apresentando os controles da
WPF - Windows Presentation Foundation- de forma que você
possa se familiarizar com os recursos que a WPF oferece. Hoje eu vou mostrar
como usar o controle Viewbox.
O controle Viewbox pertence ao namespace System.Windows.Controls e
é usado como um decorador de conteúdo que pode esticar e dimensionar um
determinado controle filho para preencher o espaço disponível.
A classe Viewbox apresenta a seguinte hierarquia de herança:
|
Namespace:
System.Windows.Controls |
Criando um Viewbox via código
Abaixo temos o código que podemos usar para criar um Viewbox via código em uma aplicação WPF:
| Versão VB .NET | Versão C# |
| ' Cria um ViewBox e o adiciona
ao Canvas Dim m_Viewbox As New Viewbox() m_Viewbox.StretchDirection = StretchDirection.Both m_Viewbox.Stretch = Stretch.Fill m_Viewbox.MaxWidth = 400 m_Viewbox.MaxHeight = 400 |
' Cria um ViewBox e o adiciona
ao Canvas m_Viewbox = new Viewbox(); m_Viewbox.StretchDirection = StretchDirection.Both; m_Viewbox.Stretch = Stretch.Fill; m_Viewbox.MaxWidth = 400; m_Viewbox.MaxHeight = 400; |
O código pode ser usado no arquivo code-behind MainWindow.xaml.vb ou MainWindow.xaml.cs.
O código XAML para definir um controle Viewbox é dado a seguir:
| <Viewbox> controle filho </Viewbox> |
Obs: Um Viewbox só pode ter um controle filho. Se
você adicionar mais de um controle filho , será lança da a exeção
ArgumentException em tempo de execução.
A classe Viewbox possui dezenas de métodos, propriedades e
eventos que você pode consultar na referência:
WPF - Viewbox - MSDN
Neste artigo como algumas das propriedades básicas na utilização do controle.
Usando o controle Viewbox
Abra o Visual Basic 2010 Express Edition (se preferir pode usar o Visual C# Express Edition) e no menu File -> New Project selecione o template WPF Application e informe o nome WPF_Viewbox e clique no botão OK:
![]() |
A seguir selecione o arquivo MainWindow.xaml e defina o seguinte código XAML:
![]() |
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Usando o controle Viewbox" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="10*"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" FontWeight="bold">Procurar imagem</Label>
<Button Grid.Column="1" Click="Button_Click">Browse</Button>
</Grid>
<Viewbox Grid.Row="1" Name="viewbox1" MouseDown="viewbox1_MouseDown">
<Image Name="oImage"></Image>
</Viewbox>
</Grid>
</Window>
|
No leiaute da janela temos um tabela definida pelo controle Grid , um controle Label, um controle Button e o controle Viewbox contendo o controle Image.
O controle Grid possui 3 propriedades principais:
-RowDefinitions - é uma coleção de RowDefinition sendo usada para
incuir linhas no grid;
-ColumnDefinitions - representa uma coleção de ColumnDefinition
sendo usada para incluir colunas ao grid;
-ShowGridLines - indica se as linhas da grade de um painel são visíveis
ou não;
Obs: Nosso grid possui duas linhas e duas colunas.
Observe que temos definidos dois eventos. O evento
Click do controle Button (Button_Click) e o evento
MouseDown do controle viewbox (viewbox1_MouseDown).
Se você abrir o arquivo code-behind MainWindow.xaml.vb verá o seguinte código :
Class MainWindow
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
End Sub Private Sub viewbox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) End Sub End Class |
Obs: Se você não visualizar este código selecione o controle Button e na janela de propriedade clique no ícone de eventos e a seguir procure pelo evento Click e clique duas vezes sobre ele. (Ou clique duas vezes no controle Button da janela). Repita o procedimento para o controle viewbox.
Vamos implementar o código do evento Click do controle Button conforme o código a seguir:
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Try
Dim oDlg As New OpenFileDialog()
oDlg.Filter = "(*.bmp)|*.bmp"
oDlg.ShowDialog()
Dim bmp As New BitmapImage()
bmp.BeginInit()
bmp.UriSource = New Uri(oDlg.FileName)
bmp.EndInit()
oImage.Source = bmp
Catch ex As Exception
MessageBox.Show("Erro ao abrir imagem.")
End Try
End Sub
|
Este código abre exibirá uma caixa de diálogo abrir arquivo que permite ao usuário procurar e selecionar uma arquivo imagem no formato bitmap.
Ao selecionar a imagem ele deverá ser exibida pelo controle Imagem oImage contido no controle Viewbox.
A seguir vamos definir o seguinte código no evento MouseDown do controle Viewbox:
Private Sub viewbox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
If e.LeftButton = MouseButtonState.Pressed AndAlso viewbox1.Width <= 500 Then
viewbox1.Height += 5
viewbox1.Width += 5
End If
If e.RightButton = MouseButtonState.Pressed AndAlso viewbox1.Width >= 10 Then
viewbox1.Height -= 5
viewbox1.Width -= 5
End If
End Sub
|
Neste código quando o usuário clicar com o botão esquerdo do mouse no controle Viewbox, o elemento filho que é a imagem será aumentada (efeito zoom). Se o usuário clicar com o botão esquerdo no controle viewbox1 então a imagem será diminuída.
Para completar vamos definir no evento Loaded da janela Window o código abaixo:
Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
viewbox1.Stretch = Stretch.Fill
viewbox1.Width = 40
viewbox1.Height = 40
End Sub
|
O método Stretch obtém ou define modo que determina como o conteúdo se encaixa no espaço disponível.
A enumeração Stretch descreve como conteúdo será redimensionado para preencher o espaço alocado. O valores possíveis são:
| None | O conteúdo preserva o seu tamanho original. |
| Fill | O conteúdo é redimensionado para preencher as dimensões de destino. A relação de aspecto não é preservada. |
| Uniform | O conteúdo é redimensionado para caber nas dimensões de destino enquanto preserva sua proporção original. |
| UniformToFill | O conteúdo é redimensionado para preencher as dimensões de destino enquanto preserva sua proporção original. Se a proporção do retângulo de destino difere da de origem, o conteúdo fonte é cortado para caber nas dimensões de destino. |
Este código apenas define o modo de preenchimento como Stretch.Fill e o tamanho da figura com largura e altura igual a 30.
Executando o projeto iremos obter:
1 - A aplicação irá exibir a janela e quando o usuário clicar no botão Browse será a aberta a caixa de diálogo para que uma imagem seja selecionada:
![]() |
2 - A imagem será exibida no controle Image com o tamanho inicial definido no evento Loaded da janela.
![]() |
3- Clicando com o botão esquerdo do mouse várias vezes a imagem terá o seu tamanho aumentado;
![]() |
Simples , simples assim...
Pegue o projeto completo aqui:
WPF_ViewBox.zip
Eu sei é apenas WPF, mas eu gosto...
Referências:
Apresentando o WPF - Windows Presentation Foundation - Macoratti.net