【问题标题】:wpf textbox textwrappingwpf 文本框文本换行
【发布时间】:2010-10-27 10:14:20
【问题描述】:

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

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

这是一个包含在宽度 * 的网格列内的文本框。我希望文本框采用所有可用宽度(因此 *),但是当用户添加文本时,我希望它在到达行尾时换行(有可用空间)。

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

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

我想对文本框说“不要增长,无论 wpf 给你什么,都不要再增加一个像素”。

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

【问题讨论】:

    标签: wpf textbox grid word-wrap


    【解决方案1】:

    尝试将TextBoxMaxWidth 属性绑定到已加星标的列的ActualWidth 属性(您必须为列命名才能执行此操作)。我很确定我过去做过类似的事情。

    类似:

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

    祝你好运!

    【讨论】:

    • 这看起来不错,但它不起作用,因为 ColumnDefinition 的 ActualWidth 属性不是 DependencyProperty 并且 MaxWidth 将始终为 0。刚刚测试...
    【解决方案2】:

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

    【讨论】:

    • +1 好电话,我没有注意到 TextBox 没有被告知要显示在第二列中(如他所愿)。 :)
    • 我假设他想要它在第 0 列中。
    • 他在上面说:“......这是一个包含在宽度为 的网格列内的文本框”。 Width="" 的列是第二列 (Grid.Column="1")。
    • 打错字了,我要在第 1 列中
    【解决方案3】:

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

    【讨论】:

    • “一些对齐属性”?哪些,以及什么?
    • @Anthony:这取决于网格本身的托管方式。 WPF 元素的大小调整行为不仅取决于元素本身,还取决于托管它的元素。要查看此操作,请在 Window 内的 StackPanel 内创建一个按钮(带文本)。更改 StackPanel 的方向并观察 Button 的大小调整行为的差异...
    猜你喜欢
    • 2012-05-14
    • 2010-11-10
    • 1970-01-01
    • 2011-02-08
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多