2011-12-13 45 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那样。希望这可以帮助。

相关问题