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的水平扩展只是我用于测试目的的任意值;你会想出一种更可靠的计算变量扩展值的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |