加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何优先处理WPF文本框自动缩放?

发布时间:2020-12-15 06:28:52 所属栏目:百科 来源:网络整理
导读:我有一些情况下,我有面板或网格自动调整大小,但如果它们包含一个TextBox与TextWrapping =“Wrap”,TextBox继续扩展的面板/网格到很久以前真正需要,如下图: 我想要做的是让TextBox通过包装文本来填充它的区域,然后再尝试向右扩展.一个简单的例子是: Grid Gr
我有一些情况下,我有面板或网格自动调整大小,但如果它们包含一个TextBox与TextWrapping =“Wrap”,TextBox继续扩展的面板/网格到很久以前真正需要,如下图:

我想要做的是让TextBox通过包装文本来填充它的区域,然后再尝试向右扩展.一个简单的例子是:

<Grid>
    <Grid Background="Black" />
    <Grid VerticalAlignment="Top" HorizontalAlignment="Left" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBox TextWrapping="Wrap" Height="120" MinWidth="200" />
    </Grid>
</Grid>

我在SO here上发现了一个类似的问题,但是发布的最佳解决方案不允许TextBox扩展.那个解决方案就像:

<Grid>
    <Grid Background="Black">
    </Grid>
    <Grid VerticalAlignment="Top" HorizontalAlignment="Left" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Border BorderThickness="0" x:Name="border" Margin="0.5" />
        <TextBox TextWrapping="Wrap" Height="120" MinWidth="200" Width="{Binding ActualWidth,ElementName=border}" />
    </Grid>
</Grid>

除了通过修改行为扩展TextBox以外的任何想法?谢谢!

解决方法

虽然我不建议这样做,因为我认为这会给用户带来意想不到的行为,这似乎实现了你所要求的:

XAML:

< TextBox ... MinHeight =“120”Width =“200”SizeChanged =“TextBox_SizeChanged”/>

代码背后:

private void TextBox_SizeChanged(object sender,SizeChangedEventArgs e)
{
    try
    {
        if (e.PreviousSize == Size.Parse("0,0")) return;
        if (e.PreviousSize == e.NewSize) return;

        if (e.HeightChanged)
        {
            ((TextBox)sender).Width = e.PreviousSize.Width + 20;
        }
    }

    finally
    {
        e.Handled = true;
    }
}

需要注意的几件事情,1)为了使其工作,您必须同时使用MinHeight和Width来扩展,2)20的水平扩展只是我用于测试目的的任意值;你会想出一种更可靠的计算变量扩展值的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读