2012-09-15 64 views
2

我正在編寫一個應用程序,該應用程序將顯示jpeg的幾個縮略圖,其中的文件名位於它們下面。我想按文件名來排序。這些jpeg來自一個zip文件,我無法按排序順序接收它們。我使用這樣定義的列表框:在C#中對包含網格控件的列表框排序#

<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應用程序,所以完全有可能我以完全錯誤的方式接近這個。

+0

該方法將讀取所有文件到列表中,對列表進行排序並將它們插入到listPanel中。我沒有經驗告訴你是否正在用WPF做正確的事情。 – Casperah

回答

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> 
    

更多關於這你可以找到herehere

+0

感謝卡雷爾,這些鏈接和您的示例提供了一些有用的信息。稍後我會試一試,看看它是否適合我。我擔心的一個問題是,我一次填充了一個項目的列表框,因爲圖片是通過回調機制解除存檔的。我希望顯示器能反映出來,以便用戶瞭解正在發生的事情。他們可以在每次添加圖像時採取措施,或者在流程結束時進行排序,無論哪種方式都適用於我。 – KeithLM

+0

你需要做些什麼來調用這種排序嗎?我已經實現了該模板,併爲實現IEnumerated的縮略圖創建了一個類,但我仍然按照添加內容的順序查看它。 – KeithLM

+1

明白了。新增了'listPanel1.Items.SortDescriptions.Add(新的System.ComponentModel.SortDescription(「_ fileName」,System.ComponentModel.ListSortDirection.Ascending));'當提取完成並且列表框項目被排序。 – KeithLM