如何自定义文本?

时间:2011-11-30 15:41:18

标签: wpf text listbox

我有一个使用datatemplates的列表框,模板中的一个元素是一个文本块。问题是单词不会换行,我不想设置固定大小。有谁知道如何解决这个问题?这让我发疯了!

                   <ListBox Grid.Row=" 1" HorizontalContentAlignment="Stretch" Background="#24221f" ItemsSource="{Binding Messages}" ScrollViewer.VerticalScrollBarVisibility="Visible" ClipToBounds="False" BorderBrush="{x:Null}">
                <ListBox.ItemTemplate>
                    <DataTemplate >
                        <Border BorderBrush="#24221f" BorderThickness="3" Width=" auto">
                            <DockPanel Background="{StaticResource blackBackground}" HorizontalAlignment="Stretch" Width="auto">
                                <Border BorderThickness="3" BorderBrush="Transparent">
                            <Image Source="{Binding IconImageUrl}" VerticalAlignment="top" Height="22" Width ="22" DockPanel.Dock="Left" />
                                </Border>
                                <Border BorderThickness="3" BorderBrush="LightGray" Height="auto" Width="auto" HorizontalAlignment="Left" VerticalAlignment="Center" DockPanel.Dock="Left">
                            <Image Source="{Binding ProfileImageUrl}" VerticalAlignment="Top" HorizontalAlignment="Left" Height="48" Width ="48"  />
                                </Border>
                                <StackPanel Orientation="Vertical" DockPanel.Dock="Left" Margin="5,0,0,0">
                                    <Label Content="{Binding Path=Sender}" Foreground="#feb41c" FontFamily="Verdana" FontWeight="Bold" FontSize="14" />
                                    <TextBlock Width="100" Text="{Binding Path=ShortMessage}" Margin="10,0,0,0" Foreground="BlanchedAlmond" TextWrapping="Wrap" FontFamily="Verdana" />
                                    <Label Content="{Binding Path=Time}" Margin="10,0,0,0" Foreground="DarkGray" FontFamily="Verdana" FontStyle="Italic"/>
                            </StackPanel>
                        </DockPanel>
                        </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

2 个答案:

答案 0 :(得分:4)

StackPanel是邪恶的:=)当我在包含StackPanel的xaml中有奇怪的行为时,切换到具有正确参数的网格(固定大小,或星号或“自动”)通常可以解决问题。 另请注意,您的xaml中存在错误,因为您设置了第一个图像(IconImageUrl)的DockPanel.Dock,而它位于应该设置它的边界周围。这可能会让布局做出奇怪的事情。

答案 1 :(得分:2)

使用Style

尝试使用Horizo​​ntalContentAlignment属性“拉伸”ListBoxItems
 <Style TargetType="{x:Type ListBoxItem}" >
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
 </Style>

并禁用Horizo​​ntalScrollBar可见性

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

<强>更新

  <Window.Resources>
    <SolidColorBrush x:Key="blackBackground" Color="Black"/>
    <Style TargetType="{x:Type ListBoxItem}" >
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>

</Window.Resources>
<Grid>
    <ListBox Grid.Row=" 1" HorizontalContentAlignment="Stretch" Background="#24221f"  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
             ItemsSource="{Binding Messages}" ScrollViewer.VerticalScrollBarVisibility="Visible" ClipToBounds="False" BorderBrush="{x:Null}">
        <ListBox.ItemTemplate>
            <DataTemplate >
                <Border BorderBrush="#24221f" BorderThickness="3" Width=" auto">
                    <DockPanel Background="{StaticResource blackBackground}" HorizontalAlignment="Stretch" Width="auto">
                        <Border BorderThickness="3" BorderBrush="Transparent">
                            <Image Source="{Binding IconImageUrl}" VerticalAlignment="top" Height="22" Width ="22" DockPanel.Dock="Left" />
                        </Border>
                        <Border BorderThickness="3" BorderBrush="LightGray" Height="auto" Width="auto" HorizontalAlignment="Left" VerticalAlignment="Center" DockPanel.Dock="Left">
                            <Image Source="{Binding ProfileImageUrl}" VerticalAlignment="Top" HorizontalAlignment="Left" Height="48" Width ="48"  />
                        </Border>
                        <StackPanel Orientation="Vertical" DockPanel.Dock="Left" Margin="5,0,0,0">
                            <Label Content="{Binding Path=Sender}" Foreground="#feb41c" FontFamily="Verdana" FontWeight="Bold" FontSize="14" />
                            <TextBlock  Text="{Binding Path=ShortMessage}" Margin="10,0,0,0" Foreground="BlanchedAlmond" TextWrapping="Wrap" FontFamily="Verdana" />
                            <Label Content="{Binding Path=Time}" Margin="10,0,0,0" Foreground="DarkGray" FontFamily="Verdana" FontStyle="Italic"/>
                        </StackPanel>
                    </DockPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

</Grid>