2

我正在编写一个应用程序,该应用程序将显示几个 jpeg 的缩略图,并在其下方显示文件名。我想按文件名对这些进行排序。这些 jpeg 来自 zip 文件,我无法按排序顺序接收它们。我正在使用这样定义的列表框:

   <ListBox Name="listPanel1" ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Multiple" >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Name="wrapPanel1" IsItemsHost="True" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <TextBox Height="152" Name="tb_Messages" Width="244" />
    </ListBox>

然后在代码中,我为 listPanel 中的每个缩略图添加了一个单独的网格控件。网格的第一行是图像,第二行是文件名。

        Grid grid = new Grid();
        ColumnDefinition col0 = new ColumnDefinition();
        RowDefinition row0 = new RowDefinition();
        RowDefinition row1 = new RowDefinition();
        col0.Width = new GridLength(140);
        row0.Height = new GridLength(140);
        grid.ColumnDefinitions.Add(col0);
        grid.RowDefinitions.Add(row0);
        grid.RowDefinitions.Add(row1);
        grid.Children.Add(thumbnailImage);
        grid.Children.Add(lb);
        Grid.SetRow(thumbnailImage, 0);
        Grid.SetColumn(thumbnailImage, 0);
        Grid.SetRow(fileName, 1);
        Grid.SetColumn(fileName, 0);
        listPanel1.Items.Add(grid);

这种方法的好处之一是,当我选择图像时,图像和文件名都会突出显示。

如何根据文件名对列表框进行排序?

这是我的第一个 WPF 应用程序,所以我完全有可能以完全错误的方式处理这个问题。

4

1 回答 1

2

不要在代码中创建 UI!除非您正在创建用户控件。

  1. 使用 aListBox并将它的数据源绑定到表示图片的对象的集合

    <ListBox ItemSource="{Binding Pictures}"/>
    
  2. 在您的视图模型中,您将获得名称和其他属性,并且Pictures属性将返回排序集合(或过滤或其他)

    public IEnumerable<Picture> Pictures
    {
       get { return _picturesLoadedFromZip.OrderBy(whatever); }
    }
    
  3. 要显示缩略图和文件名,请使用template

    <ListBoxItem Background="LightCoral" Foreground="Red" 
         FontFamily="Verdana" FontSize="12" FontWeight="Bold"> 
        <StackPanel Orientation="Horizontal"> 
          <Image Source="{Binding PathToFile}" Height="30"></Image>
          <TextBlock Text="{Binding FileName}"></TextBlock>
        </StackPanel>
    </ListBoxItem>
    

您可以在此处此处找到更多相关信息。

于 2012-09-15T08:10:34.503 回答