Usuário com melhor resposta
Como fazer um zoom no canvas?

Pergunta
-
Olá pessoal,
Estou inserindo retangulos, figuras, e retas no canvas. Gostaria de poder fazer um zoom com esses objetos.
Tem dois botões que informa maiz zoom e outro menos zoom.. e um textbox informando o zoom que está no momento.
Algué sabe como saber isso? Ou tem algum tutorial, ebook informando isto?
Respostas
-
-
Dê uma olhada em meu post:
http://msmvps.com/blogs/bsonnino/archive/2008/01/11/zoom-no-canvas-em-wpf.aspx
Bruno -
Todas as Respostas
-
-
-
Andre,
Eu consigui fazer o zoom, porém não estou conseguindo com que o ScrollViewer exiba a barra de rolagem a medida que o zoom é feito no canvas.
O esquema é assim: tenho um scrollviewer e dentro inseri o canvas, com isso insiros os objeos no canvas. Qdo faço o zoom é no canvas e os objetos aumentam ou diminui,porém o scrollViewer não mostra as barras de rolagem.
o que será que é isso?
Tem alguma iéia?
-
Dê uma olhada em meu post:
http://msmvps.com/blogs/bsonnino/archive/2008/01/11/zoom-no-canvas-em-wpf.aspx
Bruno -
Olá Bruno tudo bem?
Andei lendo o seu artigo e tentei fazer aqui na minha aplicação. O zoom funcionou direito, mas o scrollViewer não funcionou.
O scrollViewer adicionei no windows mesmo, não como no seu artigo que está dentro do dockPanel. Será que é por isso?
Segue a baixo o codigo:
<
Window x:Class="FluxogramaWPF.WindowPrincipal" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Fluxograma" Height="293" Width="584" WindowStyle="SingleBorderWindow" WindowState="Maximized"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="426*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="255*" /> </Grid.RowDefinitions> <Menu Height="22" Name="menuPrincipal" VerticalAlignment="Top"><Button Name="btnDecisao" ToolTip="DecisÆo" Click="btnDecisao_Click">
<DockPanel>
</
Window>Obrigado pela ajuda
-
-
Olá Bruno,
Olhei o seu tutorial e inserir um DockPanel, mas infelizmente ainda não funcionou.
Será porque e adicionei o dockPanel apenas no ScrollViewer, canvas?
Porque a barra de menu, toolbar e statusBar.
Olha o código:
<
Window x:Class="FluxogramaWPF.WindowPrincipal"<Button Name="btnInicio" Click="btnInicio_Click" ToolTip="In¡cio" BorderThickness="1" Padding="2" IsEnabled="True">
</Button>
<Button Name="btnFim" ToolTip="Fim" Click="btnFim_Click">
</Button>
<Button Name="btnConector" ToolTip="Conector" Click="btnConector_Click"><Button Name="btnDecisao" ToolTip="DecisÆo" Click="btnDecisao_Click">
<Button Name="btnSeta" ToolTip="Seta" Click="btnSeta_Click">
<Button Name="btnMenosZoom" ToolTip="Menos zoom (-)" Click="btnMenosZoom_Click">
<DockPanel>
</ToolBar>
<DockPanel Name="DockPanelDesenho" Margin="0,68,0,0"></
Window> -
Coloque o DockPanel ao invés do grid:
<DockPanel>
<Menu DockPanel.Dock="Top" ....>
....
</Menu>
<ToolBar DockPanel.Dock="Top" ...>
....
</ToolBar>
<StatusBar DockPanel.Dock="Bottom" ....>
....
</StatusBar>
<ScrollViewer >
....
</ScrollViewer>
</DockPanel>
Não precisa configurar a propriedade DockPanel.Dock do ScrollViewer
Bruno -
Bruno,
Fiz o que você falou, mas ainda não deu. Desculpe pelo Incomodo.
Segue o código Abaixo:
<
Window x:Class="FluxogramaWPF.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="531"> <DockPanel></
Window>No construtor do Window1.cs eu fiz assim:
public
Window1(){
InitializeComponent();
currentZ = -1;
zoom = 100;
Line linha = new Line(); SolidColorBrush solidColorBrush = new SolidColorBrush(); //cor e a forma de preenchimentosolidColorBrush.Color =
Colors.Blue;//CorReta;linha.Stroke = solidColorBrush;
//posi‡äeslinha.X1 = 10;
linha.Y1 = 10;
linha.X2 = 500;
linha.Y2 = 500;
//forma do tra‡o da retalinha.StrokeEndLineCap =
PenLineCap.Triangle;linha.StrokeThickness = 10.0;
//EspessuraReta;canvasDesenho.Children.Add(linha);
}
-
-
Mas como eu possa fazer com que o canvas tenha o tamanho da janela? Tipo se mudo o tamanho da janela o canvas também deve mudar, se maximizo o canvas também deve maximizar...
Estou perguntando isso porque a região onde o usuário irá adicionar os objetos tem que estar full.
Isso da certo Bruno?
Obrigado
-
Se o Canvas tem o tamanho da janela, as scroll bars não aparecem (porque o canvas tem o tamanho da janela). Para as scrollbars aparecerem, ele tem que ser maior que a janela. Se você quer que as scroll bars apareçam só quando o zoom for maior que 1, você deve fazer algo como o seguinte no evento Resize da Window:
CanvasDesenho.Width = ActualWidth*FatorZoom;
CanvasDesenho.Height = ActualHeight*FatorZoom;
Bruno