wpf - TextBlock TextWrapping不包装在StackPanel中

标签 wpf xaml

我有一个StackPanel,但以下行:

<TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding Notes}" TextWrapping="Wrap"  />


不包装文字。

<StackPanel Orientation="Vertical">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="15" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>

        <DockPanel Grid.Row="0" Grid.Column="0">
            <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Id, StringFormat='#\{0\}'}" />
            <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Name}" />
        </DockPanel>
        <TextBlock Grid.Row="0" Grid.Column="4" FontWeight="Bold" Text="{Binding Path=Time, StringFormat={}{0:HH:mm}}" />
        <Image
            Grid.Row="0"
            Grid.Column="6"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Source="{Binding Path=Image, Mode=OneWay, Converter={StaticResource ImageConverter}}" />

        <TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding Notes}" TextWrapping="Wrap" />

        <Image
            Grid.Row="1"
            Grid.Column="4"
            HorizontalAlignment="Center"
            VerticalAlignment="Top"
            Source="{Binding Path=Picture, Mode=OneWay, Converter={StaticResource PictureConverter}}" />
    </Grid>
</StackPanel>


StackPanel方向设置为“垂直”,但TextBlock不会继承。

我要去哪里错了?

最佳答案

您的问题是使用StackPanel允许其子级填充所有可用空间-StackPanel会根据其内容的大小进行扩展。尝试删除StackPanel并仅保留Grid-这样,您可以将其子项的大小限制为Grid使用的可用空间。

如果这在您构建的布局中还不够,请尝试在需要包装的TextBox上设置MaxWidth。

现在,问题的根源还在于您将TextBox插入到具有无限大小(Width =“ Auto”)的Grid的第一列中。因此,将Grid.Column =“ 7”设置为TextBox即可实现所需的技巧(包装文字)。这是修改后的代码:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="5" />
        <ColumnDefinition Width="15" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <DockPanel Grid.Row="0" Grid.Column="0">
        <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Id, StringFormat='#\{0\}'}" />
        <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Name}" />
    </DockPanel>
    <TextBlock Grid.Row="0" Grid.Column="4" FontWeight="Bold" Text="{Binding Path=Time, StringFormat={}{0:HH:mm}}" />
    <Image
        Grid.Row="0"
        Grid.Column="6"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Source="{Binding Path=Image, Mode=OneWay, Converter={StaticResource ImageConverter}}" />

    <TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="7" Text="{Binding Notes}" TextWrapping="Wrap" />

    <Image
        Grid.Row="1"
        Grid.Column="4"
        HorizontalAlignment="Center"
        VerticalAlignment="Top"
        Source="{Binding Path=Picture, Mode=OneWay, Converter={StaticResource PictureConverter}}" />
</Grid>

关于wpf - TextBlock TextWrapping不包装在StackPanel中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430705/

相关文章:

c# - Xamarin - 显示来自 base64 字符串的图像

wpf - 空 WPF 列表框作为放置目标

c# - C++/C# 应用程序中的内存泄漏

xaml - Xamarin Forms 中是否有 'UpdateSourceTrigger' 等效项?

wpf - 如何为组框标题和组框内容提供单独的填充

c# - 知道什么会导致 Visual Studio 2013 中的 "vshost32.exe has stopped working"吗?

c# - 将所有绑定(bind)的文本框设置为修剪

wpf - 我有一个 PopupBox,我想更改其图标。目前它默认为 DotsVertical,我希望将其设置为 DotsHorizo​​ntal

c# - 在 XAML 中重用路径对象

xaml - 如何在ListView中绑定(bind)Label的FontSize