我正在构建一个WPF用户控件,其中包含一个列表,其项目显示为图标和文本。但是,文本有不同的长度,我希望它们水平滚动。相反,我希望项目具有与用户控件相同的宽度,并且文本将被包装(因此使用垂直滚动)。带有项目宽度的列表框控制宽度
这是我的XAML
<UserControl x:Class="Demo.NotificationsWidget"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border CornerRadius="2"
BorderThickness="1" BorderBrush="LightGray"
Background="White">
<DockPanel LastChildFill="True">
<TextBlock Text="Alerts" DockPanel.Dock="Top" Margin="5" FontSize="15"/>
<ListBox Name="alertsList" DockPanel.Dock="Bottom" Margin="5"
Grid.IsSharedSizeScope="True"
HorizontalContentAlignment="Stretch"
BorderThickness="0"
ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,1,0,0" BorderBrush="Gray" Margin="5,0,5,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="col1" Width="40" />
<ColumnDefinition SharedSizeGroup="col2" Width="*" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="{Binding Image}" Width="24" Height="24" Margin="5" />
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="5">
<TextBlock Text="{Binding Title}" TextWrapping="Wrap" FontWeight="Bold" />
<TextBlock Text="{Binding Text}" TextWrapping="Wrap" />
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
</Border>
</UserControl>
这里是用含该用户控制的窗口的图像。请注意,控制宽度随窗口宽度而变化。
我要的是比当物品的宽度将超过列表宽度,文本被包裹(我得到的名单垂直滚动)。
我已经尝试为列表框添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"
,但唯一的结果是滚动隐藏。列表项目仍具有相同的宽度(比控件的宽度更长)。
如果我还不够清楚,只要看看twitter如何在列表中显示推文,这就是我想要做的。谢谢。
UPDATE:这基本上是我想达到什么:
我能够明确地设置每列的宽度数据模板网格做到这一点。
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="col1" Width="40" />
<ColumnDefinition SharedSizeGroup="col2" Width="200" />
</Grid.ColumnDefinitions>
但是,当窗口调整大小时,重要的是列表和它的项目自动调整大小。