Usuário com melhor resposta
Escalar o texto de acordo a janela

Pergunta
-
Salve amigos,
Estou me aventurando pelas linhas do WPF.
Sou amante do flash mas encontrei no wpf um caminho mais curto para trabalhar com uma UI rica.
Estou tentando fazer o texto acompanhar o redimensionamento da tela, mas não está 100%.
Gostaria de contribuição de vocês.
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:local="clr-namespace:EvolutionMessenger" x:Class="EvolutionMessenger.MainWindow" x:Name="Window" Title="MainWindow" Width="640" Height="480" SizeChanged="Window_SizeChanged"> <Window.Resources> <RadialGradientBrush x:Key="DesingVector" MappingMode="RelativeToBoundingBox" SpreadMethod="Pad"> <RadialGradientBrush.RelativeTransform> <TransformGroup> <ScaleTransform CenterX="0.517" CenterY="0.767" ScaleX="0.864" ScaleY="0.933"/> <SkewTransform AngleX="0" AngleY="0" CenterX="0.517" CenterY="0.767"/> <RotateTransform Angle="60" CenterX="0.517" CenterY="0.767"/> <TranslateTransform X="-0.218" Y="-0.142"/> </TransformGroup> </RadialGradientBrush.RelativeTransform> <GradientStop Color="#4CFFFFFF" Offset="0.987"/> <GradientStop Color="White" Offset="0.685"/> </RadialGradientBrush> <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}"/> </Window.Resources> <Grid x:Name="LayoutRoot"> <Grid.ColumnDefinitions> </Grid.ColumnDefinitions> <TextBlock x:Name="TextMen" TextWrapping="Wrap" FontSize="18.667" RenderTransformOrigin="0,0" VerticalAlignment="Top" Margin="0,-27.5,-733.444,0" FontFamily="Arial" FontWeight="Bold" TextAlignment="Justify" d:LayoutOverrides="GridBox" HorizontalAlignment="Right" Width="541.501"><TextBlock.RenderTransform> <TransformGroup> <ScaleTransform ScaleX="1" ScaleY="1"/> <SkewTransform AngleX="0" AngleY="0"/> <RotateTransform Angle="0"/> <TranslateTransform/> </TransformGroup> </TextBlock.RenderTransform><Span><Run Text="Em 1919, o glorificado Jesus Cristo colocou “uma porta aberta” diante do restante ungido. (Rev. 3:8) “Uma porta larga para atividade” ainda está bem aberta para todos os servos de Jeová. Os que passam por ela encontram alegria e satisfação ao aumentarem sua participação na pregação das boas novas. Como vocês, jovens servos de Jeová, avaliam o incomparável privilégio de ajudar outros a ‘ter fé nas boas novas’? (Mar. 1:14, 15) Já pensou em servir como pioneiro regular ou como pioneiro auxiliar? Construção de Salões do Reino, serviço de Betel e o campo missionário são outras oportunidades que estão disponíveis para muitos de vocês. Visto que o tempo para o perverso mundo de Satanás se esgota, entrar nessas modalidades de serviço do Reino fica cada dia mais urgente. Está disposto a passar pela “porta larga” enquanto há tempo? "/></Span><Span FontStyle="Italic"><Run Text="w08"/></Span><Span><Run Text=" 15/5 4:15-17"/></Span></TextBlock> </Grid> </Window>
Esse é meu código xaml. Segue abaixo o código em C#.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace EvolutionMessenger { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public double _OriHeight = 1; public double _OriWidth = 1; public bool _SizeLoad = false; public MainWindow() { this.InitializeComponent(); myTransformGroup.Children.Add(myScaleTransform); } ScaleTransform myScaleTransform = new ScaleTransform(); TransformGroup myTransformGroup = new TransformGroup(); private void Window_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e) { if(!_SizeLoad) { _OriHeight = this.TextMen.ActualHeight; _OriWidth = this.TextMen.ActualWidth; _SizeLoad = true; } myScaleTransform.ScaleX = ((this.TextMen.ActualWidth ) / (_OriWidth)); myScaleTransform.ScaleY = (this.TextMen.ActualHeight / _OriHeight); this.TextMen.RenderTransform = myTransformGroup; } } }
A idéia é pegar o percentual de aumento na largura ou altura e atribuir a escala do texto fazendo com que ele se ajuste a proporção.
Só encontrei essa maneira. No entanto, acredito haver um modo mais fácil de tornar isso possível. Do contrário, de pelo menos fazer com que a escala do texto seja exata.
Agradeço a ajuda de todos.
- Movido AndreAlvesLimaModerator domingo, 11 de julho de 2010 16:00 (De:C#)
Respostas
-
Salve pessoal,
Foi mais fácil que pensei. Basta clicar sobre o texto e no menu de contexto selecionar as opções Group Into Viewbox.
Pronto, problema resolvido.
- Marcado como Resposta Sandro Ribeiro sábado, 10 de julho de 2010 16:15