2009-05-19 100 views
9

我需要一些帮助。不知道这是否可能。我想要有以下内容:wpf textbox textwrapping

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox TextWrapping="Wrap" MinLines ="5"/> 
    </Grid> 

这是一个文本框包装在宽度为*的网格列内。我希望文本框能够获得所有可用的宽度(因此*),但是当用户添加文本时,我希望它在到达行末(可用空间)时进行换行。

目前上面将给出一个文本框的整个宽度,但是当输入文本时,文本框的宽度只是随文本增长。

我知道我可以设置MaxWidth =?,但列的*点是我不知道列的大小是什么。

我想对文本框说“不要增长,不管wpf是否让你接受它,并且不要增加多一个像素”。

我想我想要的是不可能的,因为wpf会询问控件有多大,当用户添加更多超出边界的文本时,它会请求更多的空间并将其宽度扩展到无穷大。

回答

9

试着将TextBoxMaxWidth属性绑定到您的加星列的ActualWidth属性(您必须命名您的列来执行此操作)。我很确定我过去做过这样的事情。

喜欢的东西:

MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth} 

祝你好运!

+0

这看起来不错,但它不起作用,因为ColumnDefinition的ActualWidth属性不是DependencyProperty并且MaxWidth将始终为0.现在测试... – Vale 2012-09-13 10:41:34

0

当我在文本框上设置Grid.Column="1"时似乎能正常工作。

+0

+1良好的调用,我没有注意到TextBox没有被告知要显示在第二列(正如他打算的那样)。 :) – Pwninstein 2009-05-19 18:45:30

+0

我假设他想要列0中。 – Crispy 2009-05-19 18:56:20

0

除了什么RandomEngy说,大约Grid.Column="1",你可能还需要对自身Grid设置一些调整属性,特别是当它被设置另一容器内用不同的子Stretch行为(例如StackPanel)。