IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Retour à la ligne automatique avec un viewbox


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut Retour à la ligne automatique avec un viewbox
    Bonjour
    J'ai un viewbox avec du text qui s'adapate à la taille de la fenêtre.
    j'aimerais quand le texte est en dessous d'une taille que la police augmente et qu'il fasse un retour à la ligne

    Comment faire ?

    En gros j'aimerais pouvoir dire que tout mon texte doit être capable de tenir dans un "block" où j'ai défini la taille.

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
     
            <Viewbox Stretch="Uniform" MaxHeight="400" MinHeight="200">
                <TextBlock VerticalAlignment="Bottom" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ipsum risus !" FontSize="75" TextWrapping="Wrap"  />
            </Viewbox>
     
        </StackPanel>
     
    </Window>

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Pour avoir le retour à la ligne, tu peux essayer de figer la largeur de ton TextBlock :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <Viewbox x:Name="vbox1" Stretch="Fill" >
          <TextBlock Margin="5" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ipsum risus !" 
                     FontSize="75" TextWrapping="Wrap" Width="{Binding ElementName=vbox1, Path=ActualWidth}" />
        </Viewbox>
    Là je fixe la largeur du TextBlock comme étant celle de la ViewBox. Ça a le mérite d'être assez simple, après est-ce que c'est exactement ce que tu veux ?

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 45
    Par défaut
    Je ferais ça avec l'aide d'un converter

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <Viewbox x:Name="vbox1" Stretch="Fill" >
          <TextBlock Margin="5" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ipsum risus !" 
                     FontSize="75" TextWrapping="Wrap" Width="{Binding ElementName=vbox1, Path=ActualWidth}" FontSize={Binding RelativeSource='{RelativeSource Self},Path=ActualWidth,Converter={StaticResource myConverter}} />
        </Viewbox>

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    j'ai une erreur:

    'Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' Line number '4' and line position '28'.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
     
     
            <TextBlock Margin="5" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ipsum risus !"  TextWrapping="Wrap" Width="{Binding ElementName=vbox1, Path=ActualWidth}" FontSize="{Binding RelativeSource={RelativeSource Self},Path=ActualWidth,Converter={StaticResource myConverter}}" />
     
        </StackPanel>
     
    </Window>

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Euh là tu n'as plus de ViewBox... du coup, le binding sur "ElementName=vbox1" va poser problème.

    Ensuite, si la solution que je t'ai fourni ne convient, il peut être intéressant d'utiliser en plus un converter pour gérer la FontSize en fonction de la la largeur comme le propose scapefrom. Après il faut savoir quoi mettre dans ce converter et ça c'est autre chose...
    Là l'erreur vient du fait que tu appelles un Converter qui n'est pas défini. Renseignes toi sur les Converter

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    J'ai encore un peu du mal avec les converter.
    J'ai testé avec une première approche et après je fais ma modif pour faire avec un converter (promis)

    J'ai voulu faire qu'en fonction de la taille de mon textblock, de réduire la taille de la police jusqu'il soit à la bonne taille. Or en utilisan ActualHeight ça ne marche pas à cause du rafraichissement.

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" SizeChanged="Window_SizeChanged">
        <StackPanel>
            <TextBlock x:Name="txt" VerticalAlignment="Bottom" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ipsum risus !" FontSize="75" TextWrapping="Wrap" />
     
            </StackPanel>
    </Window>

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    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.Navigation;
    using System.Windows.Shapes;
     
     
    namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
     
            private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                var txt = this.FindName("txt") as TextBlock;
                Console.WriteLine("A " + txt.ActualHeight);
                while (txt.ActualHeight >= 400)
                {
                    txt.FontSize--;
     
                }
     
                Console.WriteLine("B " + txt.ActualHeight);
            }
     
        }
    }

    Il faut que je trouve un moyen que des que je change la taille de la police que je sache la nouvelle taille de mon textblock, et de le réduire au fur et à mesure.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    N'existe-t-il pas un moyen plus simple de dire que tout mon texte doit faire 50% de ma fenêtre ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    J'ai trouvé mon bonheur ici:
    http://stackoverflow.com/questions/1...-be-auto-sized

    Mais je ne sais pas si c'est possible de le faire en MVVM

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par Oberown
    J'ai trouvé mon bonheur ici:
    http://stackoverflow.com/questions/1...-be-auto-sized

    Mais je ne sais pas si c'est possible de le faire en MVVM
    Disons que cette problématique (texte s'adaptant à la taille de la fenêtre) est purement graphique donc liée à la vue. La solution proposée dans le lien respecte donc le pattern MVVM dont le but est de découpler le plus possible les données de leurs représentations.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Merci

    Je pensais qu'on avait le droit à aucun code behind en MVVM

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. retour à la ligne automatique avec la balise <pre>
    Par Jiyuu dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 25/04/2010, 18h08
  2. Retour à la ligne automatique avec reportlab
    Par Jiyuu dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 22/06/2009, 18h08
  3. Retour à la ligne automatique avec le package listings
    Par ska38 dans le forum Mise en forme
    Réponses: 6
    Dernier message: 04/01/2009, 14h42
  4. retour à la ligne automatique sur textarea
    Par jpastier dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/10/2005, 00h44
  5. [JOptionPane]retour à la ligne automatique ?
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 01/12/2004, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo