Код для программного добавления ячеек в сетку вызывает мерцание - PullRequest
0 голосов
/ 13 декабря 2011

Я пишу новый проект на C # / XAML для Windows 8 Metro. Я пытаюсь динамически добавлять ячейки в сетку. Я хочу три колонки, а не одну, и я думал, что Грид справится с задачей. Код, который я использую ниже. Проблема в том, что каждое новое изображение, добавленное в сетку, сначала появляется в одном месте, а затем перемещается в другое - или что-то еще; там много мерцания Мой контент динамический (определяется во время выполнения), поэтому я не могу кодировать структуру в XAML. Единственное, что у меня есть в XAML - это сетка с определениями для трех столбцов и одной строки.

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 для создания трех столбцов элементов?

1 Ответ

0 голосов
/ 23 февраля 2012

Вам строго нужно 3 столбца?В любом случае вы можете рассмотреть возможность использования ItemsControl с WrapGrid в качестве его ItemsPanelTemplate вместо этого, как на этой странице .Надеюсь, это поможет.

...