WPF如何决定如何呈现textblock textwrap?

问题描述 投票:1回答:3

我试图了解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做一个或另一个?

c# wpf xaml text textwrapping
3个回答
1
投票

尝试将第3列设置为"*""Auto"意味着TextBlock将使用尽可能多的空间,实际上意味着它不需要包裹。

拖动拆分器时,您将为网格列指定显式大小,因此TextBlock将换行以适合该大小。


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>

0
投票

这真的很简单......甚至可能太简单了。

如果TextBlockTextBlock的父母被给予WidthTextBlock.Text值超过,则文本将被包裹。否则,它将不会被包裹。

它真的很简单。至于你谈到的其他“怪异”症状,我无法真正帮助你......你的代码没有告诉我他们。例如,我不知道你怎么能拖得更加左边的GridSplitter

© www.soinside.com 2019 - 2024. All rights reserved.