我有一个文本定义内的一个窗口,就像这样:

<Window x:Class="NS.MainWindow"
    ...
    SizeToContent="WidthAndHeight">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100" />
            <ColumnDefinition MinWidth="200" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="50" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>

        <TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" />
    </Grid>
</Window>

问题是,当用户类型的文本框它扩展到权利,因为只有MinWidth设置。我真正想要的是该文本的包裹到下一个线。我可以把它做到这一点,如果我改变MinWidth上列宽度代替。但是如果我这样做,那么文本不再调整大小的窗口时调整。

有没有一样我可以有两个?(即调整只能在窗口调整,否则包)

有帮助吗?

解决方案

你的原因具有这种行为是因为你已经设置的 窗口的SizeToContent酒店 -这基本上授权的窗口来调整自身的基础上的尺寸要求通过其内容。所以作为你的类型更多的东西,文说我需要更多的空间,窗口乖乖的增长。你的文本不会增长,如果您没有设置的SizeToContent财产。

所以我要说失去了SizeToContent酒店定者和使用比例网格尺寸。在这里我说的做柱#2宽度的两倍列#1.默认的"延伸"值的HorizontalAlignment和方式(网格应确保控制正确调整上一个窗口,调整。

<Window ...
    Title="MyWindow" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip"
        MinWidth="300" Width="300" Height="80">
    <Grid x:Name="myGrid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" MinWidth="100"/>
            <ColumnDefinition Width="2*" MinWidth="200" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="50" />
        </Grid.RowDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>
        <TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow"/>
    </Grid>

如果你只是添加SizeToContent酒店器回到上面的代码...你会看到一些奇怪的行为,该文本最初是随着案文的内容..但是如果你调整窗口的一次..文本框会停止成长。奇怪...不能解释该行为。
禾田

其他提示

WPF的TextBox似乎没有内置的选项。

要解决此问题,您可以使用报告所需(0,0)大小的自定义TextBox。这是一个丑陋的黑客,但它确实有效。

在MainWindow.xaml.cs文件中:

namespace NS
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        ...
    }

    // Ugly HACK because the regular TextBox doesn't allow autoresize to fit the parent but NOT autoresize when the text doesn't fit.
    public class TextBoxThatDoesntResizeWithText : TextBox
    {
        protected override Size MeasureOverride(Size constraint)
        {
            return new Size(0, 0);
        }
    }
}

然后,在您的MainWindow.xaml文件中:

<Window x:Class="NS.MainWindow"
    ...
    xmlns:local="clr-namespace:NS"
    SizeToContent="WidthAndHeight">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100" />
            <ColumnDefinition MinWidth="200" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="50" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>

        <local:TextBoxThatDoesntResizeWithText Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" />
    </Grid>
</Window>

将第二个ColumnDefinition更改为Width =&quot; *&quot;。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top