考虑以下用户控件,这是我的会话控件的一个简化版本。我有麻烦修复文本块控件的宽度(包含对话的内容)到容器控件的容器。 我得到的是一个没有换行的TextBlock控件。
如果我硬设置TextBlock控件的宽度,或者包含DockPanel(例如将DockPanel替换为注释中的那个),一切都会更好,尽管我还需要添加一个转换器来减去边距。
我见过很多类似的问题,包括在这个网站上,但没有明确的答案。 {Binding}到父元素的ActualWidth对我来说似乎很尴尬。
<UserControl
x:Class="Bar.View.test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignHeight="800" d:DesignWidth="240"
>
<UserControl.Resources>
<XmlDataProvider x:Key="Conversation" XPath="Discussion">
<x:XData>
<Discussion xmlns="">
<msg speaker="Mark" picture="http://graph.facebook.com/4/picture?type=small">Hello</msg>
<msg speaker="Uri" picture="http://graph.facebook.com/526439429/picture?type=normal">Good Morning</msg>
<msg speaker="Mark" picture="http://graph.facebook.com/4/picture?type=small">The quick brown fox jumps over the lazy dog</msg>
</Discussion>
</x:XData>
</XmlDataProvider>
</UserControl.Resources>
<ListBox x:Name="lb"
ItemsSource="{Binding Source={StaticResource Conversation},XPath=*}"
HorizontalContentAlignment="Stretch"
>
<ListBox.ItemTemplate>
<DataTemplate>
<!-- <DockPanel LastChildFill="True" Width="{Binding ElementName=lb,Path=ActualWidth}"> -->
<DockPanel LastChildFill="True">
<StackPanel DockPanel.Dock="Left" Orientation="Vertical" Width="40" Margin="2">
<Image Source="{Binding XPath=@picture}" />
<TextBlock Text="{Binding XPath=@speaker}" FontSize="8"/>
</StackPanel>
<Border BorderThickness="1" BorderBrush="Blue" CornerRadius="8" Padding="3" Margin="2" >
<TextBlock Text="{Binding XPath=.}" TextWrapping="Wrap" />
</Border>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
答案 0 :(得分:1)
我已经使用您的代码创建了一个repro,并且在列表框中可以看到水平滚动条,这就是为什么TextBox
不会变形,因为列表框的ScrollViewer
允许它无限扩展。
尝试在ScrollViewer.HorizontalScrollBarVisibility="Disabled"
上设置ListBox
,它会正确地包装文本。