C# WPF:从目录加载图像并在包装中列出它们
我正在努力学习WPF,今天我正在学习面板。在尝试使用Wrap面板时,我得到了一个惊人的想法:从一个目录加载一个图像列表,并在Wrap面板中显示它们。为了练习绑定,我决定动态加载图像列表并根据列表显示。但是图像列表不能通过绑定显示。以下是XAML代码:C# WPF:从目录加载图像并在包装中列出它们,c#,wpf,image,listbox,wrappanel,C#,Wpf,Image,Listbox,Wrappanel,我正在努力学习WPF,今天我正在学习面板。在尝试使用Wrap面板时,我得到了一个惊人的想法:从一个目录加载一个图像列表,并在Wrap面板中显示它们。为了练习绑定,我决定动态加载图像列表并根据列表显示。但是图像列表不能通过绑定显示。以下是XAML代码: <Grid> <Grid.RowDefinitions> <RowDefinition Height="28"/> <RowDefinition Height="Au
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="28"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="90"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Name="txtFolderPath" MinWidth="120" Margin="5" Text="C:\Users\Public\Pictures\Sample Pictures"/>
<Button Grid.Column="1" Name="btnLoadFolderPath" Content="Load" MinWidth="80" Margin="5" Click="btnLoadFolderPath_Click"/>
</Grid>
<ListView Grid.Row="1" Margin="0,0.2,-0.4,-242.4" ItemsSource="{Binding lstImages}" Name="lstView">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Image Width="100" Height="100"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
下面是代码的C部分:
List<Image> lstImages = new List<Image>();
private void btnLoadFolderPath_Click(object sender, RoutedEventArgs e)
{
Image imgTemp;
List<string> lstFileNames = new List<string>(System.IO.Directory.EnumerateFiles(txtFolderPath.Text, "*.jpg"));
foreach (string fileName in lstFileNames)
{
imgTemp = new Image();
imgTemp.Source = new BitmapImage(new Uri(fileName));
imgTemp.Height = imgTemp.Width = 100;
lstImages.Add(imgTemp);
}
}
List lstmimages=new List();
私有void btnLoadFolderPath_单击(对象发送方,路由目标e)
{
图像imgTemp;
List lstFileNames=新列表(System.IO.Directory.EnumerateFiles(txtFolderPath.Text,“*.jpg”);
foreach(文件名中的字符串文件名)
{
imgTemp=新图像();
imgTemp.Source=新的位图图像(新的Uri(文件名));
imgTemp.高度=imgTemp.宽度=100;
lstmimages.Add(imgTemp);
}
}
如果我用C#代码将图像添加到列表框中,我可以看到图像,但它们不会环绕。我不确定我做错了什么
请注意:我知道这个问题可能已经以不同的形式发布了几十次。但我是WPF的新手,因此无法找到用于查找它们的确切术语。我发现的几个解释要么过于简单,要么过于复杂,我无法弄清楚我到底错在哪里。下面是一个已经发布的问题,我以它为例:。我不想要文本和东西。但我只需要图像以类似的布局显示
如果有人能提供最简单的解决方案,我将不胜感激。我所需要的只是在包装面板中动态显示图像列表。提前感谢您提供的帮助。您需要针对
列表视图设置ScrollViewer.HorizontalScrollBarVisibility=“Disabled”
以禁用水平滚动功能:
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...
如果您想通过绑定使用它,则需要将其转换为公共属性。大概是这样的:
public List<Image> lstImages { get; set; }
lstImages = new List<Image>();
this.DataContext = this;
List lstmages
是一个字段,您不能绑定到该字段。是的,这将恢复包装。但我认为可能还有一些绑定问题。没错,但OP说他可以看到图像,所以我怀疑他在代码中的某个地方将ItemsSource
设置为lstmages
manuallyWrapPanel没有ItemSourceproperty@strider是谁说的?OP使用ListView
和WrapPanel
作为ItemsPanelTemplate
谢谢。现在对我也有用。
lstImages = new List<Image>();
this.DataContext = this;