Как заставить текст в определенную ширину? - PullRequest
1 голос
/ 08 декабря 2010

Я использую 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++;
                }
            }

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

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Похоже, вы могли бы использовать 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 голосов
/ 08 декабря 2010
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 дюйма).

...