我试图了解WPF在呈现启用换行的文本块时如何做出决定。
我有以下代码:
<Window x:Class="WpfWrapTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="200" Height="200">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="5"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Background="Yellow" Grid.Column="0"></Border>
<GridSplitter ResizeDirection="Columns" Grid.Column="1" Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></GridSplitter>
<Grid Grid.Column="2" MinWidth="40">
<TextBlock TextWrapping="Wrap">asdflk;jsadlkfjlaskdjflasdkjflk laskdjfl;askjd l;kasjdf l;kjsadf ;lkajsdfl k</TextBlock>
</Grid>
</Grid>
启动WPF时决定使我的文本块大于屏幕,而不考虑包装
然后当我拖动网格探测器时它会做出不同的决定(可能是因为网格探测器正在设置邻居控制的宽度?)
此示例中的第三个奇怪行为是当您尝试向左拖动格栅放大器时(第1列的最小宽度为5)。然后它决定重新放大可视屏幕空间之外的文本块。
是什么让WPF做一个或另一个?
答案 0 :(得分:1)
尝试将第3列设置为"*"
。 "Auto"
意味着TextBlock
将使用所需的空间,实际上意味着它不需要包装。
拖动拆分器时,您为网格列指定了一个显式大小,因此TextBlock将换行以适合该大小。
答案 1 :(得分:0)
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="5"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Background="Yellow" Grid.Column="0"></Border>
<GridSplitter ResizeDirection="Columns" Grid.Column="1" Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></GridSplitter>
<Grid Grid.Column="2" MinWidth="40">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="Wrap">asdflk;jsadlkfjlaskdjflasdkjflk laskdjfl;askjd l;kasjdf l;kjsadf ;lkajsdfl k</TextBlock>
</Grid>
</Grid>
</Window>
答案 2 :(得分:0)
它非常简单......甚至可能对答案来说太简单了。
如果TextBlock
或TextBlock
的父级Width
的{{1}}值超过TextBlock.Text
,则文本将被包装。否则,它将不被包裹。
真的很简单。至于另一个奇怪的&#39;你谈到的症状,我在那里真的无法帮助你......你的代码并没有告诉我他们。例如,我不确定如何拖动GridSplitter
更多左侧。