在动态创建的文本框的代码隐藏中将文本框的高度设置为auto

时间:2012-07-08 17:12:59

标签: c# silverlight windows-phone-7 xaml

我正在通过代码动态创建文本框,并将其添加到LayoutRoot。我希望文本框支持多行,因此我将AcceptsReturn属性设置为true,将TextWrapping属性设置为Wrap。我在另一个问题中读到要将Height设置为Auto,我们必须使用double.NaN,我已经这样做了。但是,当我添加它时,它的高度是无限的,并且覆盖了整个空间。我只是希望文本框最初是单行,并让它在添加行时增加高度。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:4)

TextBox换成StackPanel。如果你是通过代码来做的,你可以做这样的事情,例如:

public MainPage()
{
    InitializeComponent();

    var textBox = new TextBox
    {
        AcceptsReturn = true,
        Height = Double.NaN,
        TextWrapping = TextWrapping.Wrap
    };

    var stackPanel = new StackPanel();
    stackPanel.Children.Add(textBox);

    this.LayoutRoot.Children.Add(stackPanel);
}

答案 1 :(得分:0)

一个很好的选择是在网格中创建一个可调整大小的行并将textBox放在那里。

<RowDefinition MinHeight="20"/>

将TextBox放在此行中:

Grid.SetRow(textBox,1);

现在,如果textBox的高度为Auto或Double.NaN,则应适当调整自身和行的大小。