WPF文本框的文本换行方式

10

我需要一些帮助。不知道是否有可能实现。我想要以下内容:

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

一个文本框包装在一个宽度为*的网格列中。我希望文本框占用所有可用的宽度(因此使用*),但当用户添加文本时,希望它在行末达到空格位置时换行。

目前,以上将生成一个完整宽度的文本框,但输入文本后,文本框的宽度会随着文本增长而增大。

我知道我可以设置MaxWidth =?,但是如果列的大小为*,则不知道列的大小。

我想对文本框说“不要增长,无论wpf给你什么尺寸,请接受并且不要再增加一个像素”。

我认为我想要的是不可能的,因为WPF会询问控件它想要有多大尺寸,并且当用户添加更多超出边界的文本时,它会请求更多的空间并且无限制地扩展其宽度。

3个回答

9
尝试将您的TextBoxMaxWidth属性绑定到星号列的ActualWidth属性(您需要为该列命名才能执行此操作)。我相信我以前做过类似的事情。
类似这样:
MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth}

祝你好运!


这看起来还不错,但它不起作用,因为ColumnDefinition的ActualWidth属性不是DependencyProperty,而MaxWidth将始终为0。刚刚测试过... - Vale

0

当我在TextBox上设置Grid.Column="1"时,它似乎对我正常工作。


+1 好的点拨,我没有注意到TextBox没有被告知要在第二列显示(正如他打算的那样)。 :) - Mark Carpenter
我假设他想要它在第0列。 - Crispy
他在上面说:“...这是一个文本框,它包裹在一个宽度为的网格列中。” 宽度为“”的列是第二列(Grid.Column =“1”)。 - Mark Carpenter
那是个打错了的字,我想要它在第一列。 - Jose

0
除了 RandomEngy 提到的 Grid.Column="1",您还可能需要在 Grid 本身上设置一些对齐属性,特别是如果它被设置在另一个具有不同子项 Stretch 行为(例如,StackPanel)的容器内。

一些对齐属性?哪些属性,对齐到哪里? - Anthony
@ Anthony:这取决于网格本身的托管方式。WPF元素的大小行为不仅取决于元素本身,还取决于托管它的元素。要查看此操作,请在窗口内创建一个StackPanel,其中包含一个带有文本的Button。更改StackPanel的方向并观察Button的大小行为差异... - micahtan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接