C# 如何将文本强制设置为特定宽度?

C# 如何将文本强制设置为特定宽度?,c#,.net,wpf,pixelsense,C#,.net,Wpf,Pixelsense,我使用GridView来显示我的布局。在此GridView中,我手动添加了一些RowDefinitions,并在此RowDefinitions中添加了一个包含2个矩形的画布: foreach (Method m in sourceFile.getMethods()) { if (!m.getName().StartsWith("<") && !m.getName().EndsWith(">"))

我使用GridView来显示我的布局。在此GridView中,我手动添加了一些RowDefinitions,并在此RowDefinitions中添加了一个包含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++;
                }
            }
foreach(sourceFile.getMethods()中的方法m)
{
如果(!m.getName().StartsWith(“”)
{
RowDefinition行=新的RowDefinition();
row.Height=GridLength.Auto;
MethodsContainer.RowDefinitions.Add(行);
Canvas c=新画布();
c、 宽度=宽度;
c、 高度=高度;
c、 Tag=m;
AddPreviewContactDownHandler(c,新的ContactEventHandler(onContactDown));
矩形r1=新矩形();
r1.高度=高度;
r1.宽度=m.getLoc()*(宽度/1000);
Canvas.SetLeft(r1,0);
Canvas.SetLeft(r1,0);
r1.填充=刷子。红色;
矩形r2=新矩形();
r2.高度=高度;
r2.宽度=宽度-r1.宽度;
Canvas.SetTop(r2,0);
Canvas.SetLeft(r2,r1.宽度);
r2.填充=画笔。蓝色;
c、 添加(r1);
c、 添加(r2);
Grid.SetRow(c,行计数器);
方法容器。儿童。添加(c);
行计数器++;
}
}
画布的宽度为200像素,高度为30像素。两个矩形完全填满画布。现在我想在这两个矩形上添加一些文本。但我不知道课文有多长。然而,我想强制文本总是打印到这个200px中。我怎样才能做到这一点

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英寸)测量


顺便说一句,它不是WPF中的像素,而是一个独立于设备的单位(1/96英寸)测量。

听起来你可以使用一个可视框。这将使文本水平和垂直拉伸。如果我正确理解了这个问题,我想这就是你想要的。xaml中的示例

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

听起来您可以使用ViewBox。这将使文本水平和垂直拉伸。如果我正确理解了这个问题,我想这就是你想要的。xaml中的示例

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

谢谢,这是工作,但它包装在多行文本。因为我有一个固定的高度,所以我更喜欢文本变小。@Roflcoptr:你试过我的答案了吗?这几乎就是使用Viewbox时得到的效果。还是我错过了什么?啊,我看到了。谢谢这正是我需要的。谢谢,这是工作,但它包装在多行文本。因为我有一个固定的高度,所以我更喜欢文本变小。@Roflcoptr:你试过我的答案了吗?这几乎就是使用Viewbox时得到的效果。还是我错过了什么?啊,我看到了。谢谢这正是我需要的。谢谢,这正是我需要的!谢谢,这正是我需要的!