2011-12-13 46 views
0

我正在爲Windows 8 Metro的C#/ XAML中的新項目編碼。我試圖動態地將單元格添加到網格中。我想要3列,而不僅僅是1列,我認爲Grid會做到這一點。我使用的代碼如下。問題是,每個添加到網格的新圖像首先出現在一個地方,然後移動到另一個地方 - 或者某個地方;有很多閃爍。我的內容是動態的(在運行時確定),所以我無法在XAML中對結構進行編碼。我在XAML中唯一具有三列一行定義的網格。以編程方式向Grid添加單元格的代碼導致閃爍

StorageFolder picturesFolder = KnownFolders.PicturesLibrary; 
StorageFolderQueryResult queryResult = picturesFolder.CreateFolderQuery(); 
IReadOnlyList<IStorageFolder> folderList = await queryResult.GetFoldersAsync(); 

int row = 0, col = 0; 
foreach (IStorageFolder folder in folderList) 
{ 
    IReadOnlyList<IStorageFile> fileList = await folder.GetFilesAsync(); 
    foreach (IStorageFile file in fileList) 
    { 
     Image image = new Image(); 
     image.Source = await LoadImageFromFileAsync(file); 
     image.Width = 150; 
     image.Height = 150; 
     Grid.SetColumn(image, col); 
     Grid.SetRow(image, row); 
     ++col; 
     if (col == 3) 
     { 
      col = 0; 
      ++row; 
      RowDefinition rd = new RowDefinition(); 
      GridLength gl = new GridLength() { Value = 150 }; 
      rd.Height = gl; 
      grid.RowDefinitions.Add(rd); 
     } 
     grid.Children.Add(image); 
    } 
} 

所以:我該如何擺脫閃爍?有沒有辦法在XAML中設置一個項目模板來創建三列項目?

+0

可悲的是,我越看越這個,我認爲這是MS代碼中的一個錯誤 – AndrewS 2011-12-13 20:25:53

回答

0

您是否嚴格需要3列? 在任何情況下,您可能都想考慮使用帶有WrapGrid的ItemsControl作爲其ItemsPanelTemplate,而不是像page那樣。希望這可以幫助。

相關問題