Wpf 用户控件TextWrapping中的textblock未包装
我用textblock创建了用户控件。但它不会包起来。此用户将服务器控制为listboxitemWpf 用户控件TextWrapping中的textblock未包装,wpf,Wpf,我用textblock创建了用户控件。但它不会包起来。此用户将服务器控制为listboxitem <Grid x:Name="MainGrid" Height="Auto" Width="Auto"> <StackPanel Orientation="Horizontal"> <Image Height="50" Width="100" Stretch="Uniform" Name="image1" Source="{Binding
<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>
列表框的默认模板不会自动限制其项目的宽度,而是使用ScrollViewer,当项目比列表框宽时,ScrollViewer会显示水平滚动条 您可以通过替换列表框的以下内容来删除ScrollViewer:
...
另一个需要注意的重要事项是顶级网格中的StackPanel无法正确调整包含的元素的大小。在下面的简化示例中,TextBlock中的文本未被包装,因为包含的StackPanel没有按预期调整其大小:
<Grid>
<StackPanel Orientation="Horizontal">
<Image ... />
<Text TextWrapping="Wrap" Text=... />
</StackPanel>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image ... />
<TextBlock Grid.Column="1" TextWrapping="Wrap" Text=... />
</Grid>
通过这种方式,它可以按照您的预期工作:
<Grid>
<StackPanel Orientation="Horizontal">
<Image ... />
<Text TextWrapping="Wrap" Text=... />
</StackPanel>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image ... />
<TextBlock Grid.Column="1" TextWrapping="Wrap" Text=... />
</Grid>
列表框的默认模板不会自动限制其项目的宽度,而是使用ScrollViewer,当项目比列表框宽时,ScrollViewer会显示水平滚动条 您可以通过替换列表框的以下内容来删除ScrollViewer:
...
另一个需要注意的重要事项是顶级网格中的StackPanel无法正确调整包含的元素的大小。在下面的简化示例中,TextBlock中的文本未被包装,因为包含的StackPanel没有按预期调整其大小:
<Grid>
<StackPanel Orientation="Horizontal">
<Image ... />
<Text TextWrapping="Wrap" Text=... />
</StackPanel>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image ... />
<TextBlock Grid.Column="1" TextWrapping="Wrap" Text=... />
</Grid>
通过这种方式,它可以按照您的预期工作:
<Grid>
<StackPanel Orientation="Horizontal">
<Image ... />
<Text TextWrapping="Wrap" Text=... />
</StackPanel>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image ... />
<TextBlock Grid.Column="1" TextWrapping="Wrap" Text=... />
</Grid>
您指的是哪个文本块?我看到至少有两个带有TextWrapping=“Wrap”。第二个是descriptionTextBoxWhat TextBlock,你指的是哪个文本块?我看到至少有两个使用TextWrapping=“Wrap”。第二个-descriptionTextBoxWell,谢谢,这做了一些修复-listboxitem本身正在包装。不幸的是,textblox文本仍然没有包装。您可能应该省略水平StackPanel,并为顶层网格定义(两个?)列。如果你的XAML更具可读性。。。请考虑更好的格式化。水平堆栈面板在那里,这样当左边的图像放大时,右边的所有内容都会滑动。关于格式-我可以做一点更一致的缩进,但没有发现任何其他问题。但是水平堆叠面板也是问题的原因。请参阅我编辑的答案。图像仍然可以放大。是的,适当的缩进将显著提高可读性,至少对我来说是这样。不幸的是,ActualWidth返回了我不相信的值,因此textblock即使在可能不会的情况下也会进行包装。谢谢,这做了一点修正-listboxitem本身正在包装。不幸的是,textblox文本仍然没有包装。您可能应该省略水平StackPanel,并为顶层网格定义(两个?)列。如果你的XAML更具可读性。。。请考虑更好的格式化。水平堆栈面板在那里,这样当左边的图像放大时,右边的所有内容都会滑动。关于格式-我可以做一点更一致的缩进,但没有发现任何其他问题。但是水平堆叠面板也是问题的原因。请参阅我编辑的答案。图像仍然可以放大。是的,适当的缩进将显著提高可读性,至少对我来说是这样。不幸的是,ActualWidth返回了我不相信的值,所以textblock即使假设它不相信,也会进行包装。