2010-12-07 32 views
1

J'utilise un GridView pour afficher ma mise en page. Pour ce GridView i ajouter manuellement certains RowDefinitions et en ce RowDefinitions ajouter une toile contenant 2 rectangles:Comment forcer du texte dans une largeur spécifique?

foreach (Method m in sourceFile.getMethods()) 
      { 
       if (!m.getName().StartsWith("<") && !m.getName().EndsWith(">")) 
       { 
        RowDefinition row = new RowDefinition(); 
        row.Height = GridLength.Auto; 
        MethodsContainer.RowDefinitions.Add(row); 

        Canvas c = new Canvas(); 
        c.Width = width; 
        c.Height = height; 
        c.Tag = m; 
        Contacts.AddPreviewContactDownHandler(c, new ContactEventHandler(onContactDown)); 

        Rectangle r1 = new Rectangle(); 
        r1.Height = height; 
        r1.Width = m.getLoc() * (width/1000); 
        Canvas.SetLeft(r1, 0); 
        Canvas.SetLeft(r1, 0); 
        r1.Fill = Brushes.Red; 

        Rectangle r2 = new Rectangle(); 
        r2.Height = height; 
        r2.Width = width - r1.Width; 
        Canvas.SetTop(r2, 0); 
        Canvas.SetLeft(r2, r1.Width); 
        r2.Fill = Brushes.Blue; 

        c.Children.Add(r1); 
        c.Children.Add(r2); 

        Grid.SetRow(c, rowCounter); 
        MethodsContainer.Children.Add(c); 
        rowCounter++; 
       } 
      } 

La toile est 200px largeur et la hauteur 30px. Les deux rectangles remplissent exactement le canevas. Maintenant, je veux ajouter du texte sur les deux Rectangles. Mais je ne sais pas combien de temps le texte est. Cependant je veux forcer que le texte est toujours imprimé dans ce 200px. Comment puis-je y parvenir?

Répondre

3

On dirait que vous pourriez utiliser une ViewBox. Cela va étirer votre texte à la fois horizontalement et verticalement. Je suppose que c'est ce que vous voulez si j'ai bien compris la question. Exemple en XAML

<Canvas Width="200" 
     Height="30"> 
    <Viewbox Width="200" 
      Height="30"> 
     <TextBlock Text="Text that will fit in 200 Width"/> 
    </Viewbox> 
</Canvas> 

Et dans le code derrière ce sera comme

TextBlock textBlock = new TextBlock(); 
textBlock.Text = "Text that will fit in 200 Width"; 

Viewbox viewBox = new Viewbox(); 
viewBox.Width = width; 
viewBox.Height = height; 
viewBox.Child = textBlock; 

c.Children.Add(viewBox); 
+0

Merci c'est exactement ce dont j'ai besoin! – RoflcoptrException

+0

Bien sûr, content que ça a marché :) –

2
var txt = new TextBlock(); 
txt.MaxWidth = 200; 

// optionally you might want the text to wrap if too long 
txt.TextWrapping = TextWrapping.Wrap; 

Par ailleurs, il n'y a pas de pixels dans WPF, il est une unité indépendante du dispositif de mesure (1/96ème de pouce).

+0

Merci que cela fonctionne, mais il enveloppe le texte en plusieurs lignes. Puisque j'ai une hauteur fixe, je préférerais que le texte soit plus petit. – RoflcoptrException

+0

@Roflcoptr: Avez-vous essayé ma réponse? C'est à peu près l'effet que vous obtiendrez en utilisant une Viewbox. Ou ai-je oublié quelque chose? –

+0

Ah je l'ai vu. Merci. C'est exactement ce dont j'ai besoin. – RoflcoptrException