none
Escalar o texto de acordo a janela RRS feed

  • 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. 

     

    sábado, 10 de julho de 2010 13:27

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
    sábado, 10 de julho de 2010 16:15