用户控件中的文本块 TextWrapping 不换行

Nic*_*eon 0 wpf

我用文本块创建了用户控件。但它不会包装。此用户控制服务器作为列表框项目。

 <Grid x:Name="MainGrid" Height="Auto" Width="Auto">

    <StackPanel Orientation="Horizontal">


        <Image Height="50" Width="100" Stretch="Uniform" Name="image1"  Source="{Binding Path=VideoImageUrl}" Margin="12,12,13,84" MouseLeftButtonDown="image1_MouseLeftButtonDown" MouseEnter="image1_MouseEnter" MouseLeave="image1_MouseLeave" />

            <StackPanel Orientation="Vertical" >


            <TextBlock TextWrapping="Wrap"  Height="Auto" HorizontalAlignment="Left"  Name="titleTextBox" 
                    Text="{Binding Path=Title, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" 
                    VerticalAlignment="Center" Width="Auto" FontSize="14" FontWeight="SemiBold" />
            <StackPanel Orientation="Vertical" x:Name="StackPanelDetails">

                    <TextBlock  Height="Auto" HorizontalAlignment="Left" Name="desciptionTextBox" 
                                TextWrapping="Wrap"
                    Text="{Binding Path=Desciption, Mode=OneWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" 
                    VerticalAlignment="Center" Width="Auto" />

                <Line />
                <ItemsControl x:Name="CustomItemsSource" ItemsSource="{Binding Path=LinksList}" >

                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock>
                            <Hyperlink  NavigateUri="{Binding Path=TopicUrl}" RequestNavigate="Hyperlink_RequestNavigate" >
                              <TextBlock Text="{Binding Path=TopicName}" />
                            </Hyperlink>
                        </TextBlock>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>

            </ItemsControl>
            </StackPanel>

        </StackPanel>

    </StackPanel>


</Grid>
Run Code Online (Sandbox Code Playgroud)

Cle*_*ens 5

ListBox 的默认模板不会自动限制其项目的宽度,而是使用 ScrollViewer,当项目比 ListBox 宽时,它会显示水平滚动条。

您可以通过替换 ListBox 的Template来删除 ScrollViewer :

<ListBox ...>
    <ListBox.Template>
        <ControlTemplate>
            <StackPanel IsItemsHost="True"/>
        </ControlTemplate>
    </ListBox.Template>
    ...
</ListBox>
Run Code Online (Sandbox Code Playgroud)

另一个需要注意的重要事项是顶层 Grid 中的 StackPanel 不会正确调整所包含元素的大小。在下面的简化示例中,TextBlock 中的文本没有被换行,因为包含的 StackPanel 没有按照您的预期调整它的大小:

<Grid>
    <StackPanel Orientation="Horizontal">
        <Image ... />
        <Text TextWrapping="Wrap" Text=... />
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

这样它就可以按您的预期工作:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Image ... />
    <TextBlock Grid.Column="1" TextWrapping="Wrap" Text=... />
</Grid>
Run Code Online (Sandbox Code Playgroud)