Список W7P не остается прокрученным в эмуляторе

#silverlight #xaml #windows-phone-7 #listbox #scroll

#silverlight #xaml #windows-phone-7 #список #прокрутка

Вопрос:

У меня есть список на странице xaml для приложения Windows Phone 7. Он начинается пустым, затем я заполняю его некоторыми элементами, как только они извлекаются из веб-службы. Пока что все работает нормально — элементы отображаются в списке, и все кажется нормальным. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь перетащить список для прокрутки вниз (в эмуляторе): я могу прокрутить вниз, но как только я отпускаю кнопку мыши, список возвращается наверх, как будто я его вообще не прокручивал. Есть идеи, почему он будет вести себя таким образом?

 <Grid x:Name="ContentPanel" Grid.Row="2" Margin="0,0,0,0" Canvas.ZIndex="0">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/> <!-- EDIT: the problem was "Auto" here should have been "*" -->
    </Grid.RowDefinitions>

    <!-- removed other element for brevity -->

    <ListBox Name="InfoBoardListBox" Grid.Row="1" SelectionChanged="InfoBoardListBox_SelectionChanged"
              Margin="0,0,0,0" FontSize="26.667" />
</Grid>
  

И метод, который заполняет список:

     foreach (InfoBoard entry in boards.Values) {
        item = new ListBoxItem();
        item.Content = entry.Name;
        item.Name = entry.Id.ToString(); //used to tell which entry was clicked
        InfoBoardListBox.Items.Add(item);
    }
  

Ответ №1:

Попробуйте установить высоту второй строки на * вместо Auto ; Я думаю, это связано с размером, который, по мнению ListBox, соответствует доступное пространство.

Комментарии:

1. Похоже, это устранило проблему. Я искал какую-то информацию о том, что именно Auto и * предполагается делать, пока безуспешно. Из этого примера похоже, что Auto говорится, что нужно определить размер один раз во время начальной загрузки страницы, и * говорится, что нужно вычислять это всякий раз, когда что-то меняется.

2. В контексте определения строки Автоматически означает сделать строку такой же высокой, как ее содержимое, но не выше. Star — это доля доступного пространства (т. е. после строк с фиксированной высотой или автоматической высотой). Если у вас есть две строки, для каждой из которых установлено значение * , то каждая будет иметь половину высоты. Здесь есть некоторая документация: msdn.microsoft.com/en-us/library /…

3. Тогда это имеет смысл. Высота списка была бы установлена примерно на 0, поскольку в нем не было содержимого, и его размер либо не изменяется при добавлении элементов, либо уменьшается в нижней части экрана. В последнем случае в нем всегда было бы достаточно места (часть его за пределами экрана) для отображения всех элементов, что объясняло бы их возвращение на место. * — это определенно то поведение, которое я хочу: список, который занимает ровно оставшуюся высоту на экране.