2010-12-07 2 views
1

Я использую GridView для отображения моего макета. Для этого GridView я вручную добавить некоторые RowDefinitions и в этом RowDefinitions добавить 1 Холст, содержащий 2 прямоугольника:Как форматировать текст в определенной ширине?

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

Полотно 200px ширина и высота 30px. Оба прямоугольника точно заполняют холст. Теперь я хочу добавить текст над этими двумя прямоугольниками. Но я не знаю, как долго текст. Однако я хочу заставить текст всегда печатать в этом 200px. Как я могу это достичь?

ответ

3

Похоже, вы можете использовать ViewBox. Это заставит ваш текст растягиваться как по горизонтали, так и по вертикали. Я предполагаю, что это то, что вы хотите, если я правильно понял вопрос. Пример в XAML

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

И в коде позади него будет как

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); 
2
var txt = new TextBlock(); 
txt.MaxWidth = 200; 

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

Кстати, это не пикселей в WPF, это устройство-независимый блок (1/96-я дюйма) измерение.

+0

Благодаря это работает, но это оборачивает текст в несколько строк. Поскольку у меня есть фиксированная высота, я бы предпочел, чтобы текст стал меньше. – RoflcoptrException 2010-12-08 12:06:15

+0

@ Roflcoptr: Вы попробовали мой ответ? Это в значительной степени эффект, который вы получите при использовании Viewbox. Или я что-то пропустил? – 2010-12-08 13:38:25

Смежные вопросы