我有一个列表框,我想在其中设置列取决于上下文(图像大小)。所以如果我有更大的图像,那么我想要更少的列。如果未设置列属性,则可以正常工作,但是如果我的图像非常宽,则拉伸太大。如果我设置图像的 minWidth 或 minHeight,由于图像尺寸不同(宽图像中添加了许多空白),并不总是可以正常工作。所以我的下一个想法是以编程方式设置列数以取决于图像大小。也许有绑定,但我不知道如何将其应用于代码。
<ListBox SelectionMode="Multiple" Grid.Column="0" x:Name="lvBox" ScrollViewer.HorizontalScrollBarVisibility="Disabled" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border" Padding="2" SnapsToDevicePixels="true" Background="White" Margin="0">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="LightBlue"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" HorizontalAlignment="Stretch">
<Image Name="imageView" Source="{Binding ImageData}" HorizontalAlignment="Stretch" VerticalAlignment="Top" Stretch="UniformToFill" />
<TextBlock Text="{Binding TimeStamp}" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是一个问题,其中未设置 uniformgrid 中的列属性并且图像很宽。图像太小(列太多)。
这里是普通图片的问题,列直接设置为2。图片太大(没有足够的列)。
知道如何解决这个问题吗?如何在没有硬编码设置 minWidth 或 minHeight 的情况下限制拉伸,或者如何在 C# 中设置列数取决于图像大小。