2010-12-07 9 views
1

Ich verwende eine GridView, um mein Layout anzuzeigen. Zu diesem Gridview hinzufügen i manuell einige RowDefinitions und in diesem RowDefinitions I 1 hinzufügen Leinwand mit 2 Rechtecken:Wie erzwinge ich Text in eine bestimmte Breite?

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++; 
       } 
      } 

Die Leinwand ist 200px Breite und 30px Höhe. Beide Rechtecke füllen den Canvas genau. Jetzt möchte ich etwas Text über diese beiden Rechtecke hinzufügen. Aber ich weiß nicht, wie lange der Text ist. Ich möchte jedoch erzwingen, dass der Text immer in diesem 200px gedruckt wird. Wie kann ich das erreichen?

Antwort

3

Klingt, als könnten Sie eine ViewBox verwenden. Dadurch wird Ihr Text sowohl horizontal als auch vertikal gestreckt. Ich nehme an, dass Sie das wollen, wenn ich die Frage richtig verstanden habe. Beispiel in XAML

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

Und in Code dahinter wird wie

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

Danke, das ist genau das, was ich brauche! – RoflcoptrException

+0

Sicher, glücklich, es hat funktioniert :) –

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

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

Durch die Art und Weise, ist es nicht Pixel in WPF, ist es eine geräteunabhängige Einheit (1/96th inch) Messung.

+0

Dank dieser funktioniert, aber es hüllt den Text in mehreren Zeilen. Da ich eine feste Höhe habe, würde ich es vorziehen, wenn der Text nur kleiner wird. – RoflcoptrException

+0

@Roflcoptr: Hast du meine Antwort versucht? Das ist ziemlich genau der Effekt, den Sie bei Verwendung einer Viewbox bekommen. Oder habe ich etwas vermisst? –

+0

Ah ich sah es nicht. Vielen Dank. Es ist genau das, was ich brauche. – RoflcoptrException

Verwandte Themen