显示水平图像的列表框WPF
我试图在wpf/xaml中创建一个控件,该控件将显示图像的水平列表。要固定的列表框的宽度(无滚动条)。添加新项目时,现有项目会减少为容纳该项目而显示的图像量(实际图像不会仅减少显示的图像量)。该功能类似于向具有相对宽度属性(“*”)的网格添加新列,并且该列包含具有固定宽度的图像。以下是我目前的代码:显示水平图像的列表框WPF,wpf,image,xaml,listbox,Wpf,Image,Xaml,Listbox,我试图在wpf/xaml中创建一个控件,该控件将显示图像的水平列表。要固定的列表框的宽度(无滚动条)。添加新项目时,现有项目会减少为容纳该项目而显示的图像量(实际图像不会仅减少显示的图像量)。该功能类似于向具有相对宽度属性(“*”)的网格添加新列,并且该列包含具有固定宽度的图像。以下是我目前的代码: <Window.Resources> <ItemsPanelTemplate x:Key="ListBox_HorizontalItems"> <
<Window.Resources>
<ItemsPanelTemplate x:Key="ListBox_HorizontalItems">
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
<DataTemplate x:Key="ListBox_DataTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Image Width="150" Source="{Binding ImageSource}" />
</Grid>
</DataTemplate>
<Style x:Key="ListBox_Style_Horizontal" TargetType="ListBox">
<Setter Property="Width" Value="150" />-->
<Setter Property="ItemTemplate" Value="{StaticResource ListBox_DataTemplate}" />
<Setter Property="ItemsPanel" Value="{StaticResource ListBox_HorizontalItems}" />
</Style>
</Window.Resources>
<Grid>
<ListBox Name="lbxImages" Style="{StaticResource ListBox_Style_Horizontal}" Width="250" Height="100" />
</Grid>
-->
这是非常接近我需要的!然而,当一个新的项目被添加到列表中时,我不知道如何减少图像的显示量。当前,添加新项目时会出现一个滚动条。如果我没有很好地解释我自己,下面是一些显示我需要的功能的屏幕截图:
有人能告诉我如何做到这一点吗?谢谢你的帮助 将以下UniformGrid用作ItemsPanel:
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding Path=Items.Count,RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"/>
</ItemsPanelTemplate>
禁用水平滚动:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
修改项目模板:
<DataTemplate>
<Image Source="{Binding ImageSource}"
Stretch="None"
HorizontalAlignment="Center"/>
</DataTemplate>
<Style TargetType="ListBox">
<Setter Property="Height" Value="Auto"/>
<Setter Property="Width" Value="Auto"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border
BorderBrush="Red"
BorderThickness="1">
<UniformGrid
IsItemsHost="True"
Rows="1">
</UniformGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Setter Property="Width" Value="Auto"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Padding" Value="5 0 5 0"/>
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<!-- Presenter for the UniformGrid: -->
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<!-- triggers to indicate selection -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
我发现替换ItemsPanelTemplate不足以摆脱滚动条,因为ItemsPanelTemplate嵌入了ScrollViewer中的列表框中。您可能还需要删除该ScrollViewer 我替换了整个列表框的模板:
<Style TargetType="ListBox">
<Setter Property="Height" Value="Auto"/>
<Setter Property="Width" Value="Auto"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border
BorderBrush="Red"
BorderThickness="1">
<UniformGrid
IsItemsHost="True"
Rows="1">
</UniformGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Setter Property="Width" Value="Auto"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Padding" Value="5 0 5 0"/>
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<!-- Presenter for the UniformGrid: -->
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<!-- triggers to indicate selection -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
此外,不需要找出UniformGrid中的列数。系统只使用ListBoxItems的数量。
IsItemsHost=“True”我想这是为您做的。谢谢您的帮助,它工作得很好!我以前从未使用过“UniformGrid”,看起来非常有用。。。