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 に追加します。グリッドの最初の行は画像で、2 番目の行はファイル名です。

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

この方法の良い点の 1 つは、画像を選択すると、画像とファイル名の両方が強調表示されることです。

ファイル名に基づいてリストボックスをソートするにはどうすればよいですか?

これは私の最初の WPF アプリなので、完全に間違った方法でアプローチしている可能性は十分にあります。

4

1 に答える 1

2

コードで UI を作成しないでください。ユーザー コントロールを作成している場合を除きます。

  1. データソースを使用してListBox、画像を表すオブジェクトのコレクションにバインドします

    <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 に答える