WPF - 垂直增长以容纳所有文本的文本框

时间:2009-11-23 13:55:38

标签: wpf textbox word-wrap autogrow

                                                                                                                                                                                                               

问题:我没有获得具有水平自动换行和垂直自动增长功能的文本框设置。我希望通过编写代码来做到这一点。我编写了以下代码,使用wordwrap在鼠标dblclick上创建一个文本框:

        TextBox text2 = new TextBox();
        text2.Width = 500;
        text2.Visibility = Visibility.Visible;
        text2.Focus();
        text2.Height = 30;
        text2.HorizontalAlignment = HorizontalAlignment.Left;
        text2.VerticalAlignment = VerticalAlignment.Top;
        Point p = e.GetPosition(LayoutRoot);
        text2.Margin = new Thickness(p.X, p.Y, 0, 0);
        LayoutRoot.Children.Add(text2);

但是,文本框不会垂直增长。 有人可以建议我用C#中的代码来完成我想要的吗?

3 个答案:

答案 0 :(得分:5)

尝试使用此

        Grid grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
        grid.RowDefinitions.Add(new RowDefinition());

        TextBox textBox = new TextBox() { Width = 100, TextWrapping = TextWrapping.Wrap };

        textBox.SetValue(Grid.RowProperty, 0);
        grid.Children.Add(textBox);
        window.Content = grid;

其中window是分配给Window(root)的名称。

答案 1 :(得分:0)

实现您正在寻找的增长的一种方法是使用字符串measuring mechanism,您可以在文本框中的文本发生更改时运行该字符串。只需对内容进行任何更改,即可相应地测量和调整文本框的大小。

答案 2 :(得分:0)

你试过这个吗?

text2.Height = double.NaN; // or don't set the property, but some custom styles might give a default value ..
text2.TextWrapping = TextWrapping.Wrap;
text2.MinHeight = 30; // or not if you want the styles default

而不是

text2.Height = 30;

未设置或使用double.NaN与在xaml中使用“Auto”相同。