Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:从目录加载图像并在包装中列出它们_C#_Wpf_Image_Listbox_Wrappanel - Fatal编程技术网

C# WPF:从目录加载图像并在包装中列出它们

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

我正在努力学习WPF,今天我正在学习面板。在尝试使用Wrap面板时,我得到了一个惊人的想法:从一个目录加载一个图像列表,并在Wrap面板中显示它们。为了练习绑定,我决定动态加载图像列表并根据列表显示。但是图像列表不能通过绑定显示。以下是XAML代码:

<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;