我试图了解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时决定使我的文本块大于屏幕,而不考虑包装
然后,当我拖动gridsplitter时它会做出不同的决定(可能是因为gridsplitter设置了邻居控件的宽度?)
此示例中的第三个奇怪行为是当您尝试向左拖动格栅放大器时(第1列的最小宽度为5)。然后它决定重新放大可视屏幕空间之外的文本块。
是什么让WPF做一个或另一个?
尝试将第3列设置为"*"
。 "Auto"
意味着TextBlock
将使用尽可能多的空间,实际上意味着它不需要包裹。
拖动拆分器时,您将为网格列指定显式大小,因此TextBlock将换行以适合该大小。
<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>
这真的很简单......甚至可能太简单了。
如果TextBlock
或TextBlock
的父母被给予Width
,TextBlock.Text
值超过,则文本将被包裹。否则,它将不会被包裹。
它真的很简单。至于你谈到的其他“怪异”症状,我无法真正帮助你......你的代码没有告诉我他们。例如,我不知道你怎么能拖得更加左边的GridSplitter
。