строки случайным образом обрезаются в xamarin listview

#c# #listview #xamarin #xamarin.forms #label

#c# #listview #xamarin #xamarin.forms #метка

Вопрос:

Я создаю базовое приложение Android master / detail в версии 2019, которое было запущено с «пустым» мобильным шаблоном.

Я просто использую сетку для макета. У меня есть ListView во фрейме, который находится в строке сетки. ItemsSource из ListView привязан к общему списку:

 List<MyObject>
  

Класс MyObject имеет свойство Name. ListView содержит простую метку в своей ячейке просмотра / DataTemplate / ItemTemplate. Текст метки привязан к свойству Name класса MyObject.

Проблема в том, что некоторые отображаемые строки обрезаны. Какие строки обрезаны, кажется случайным. Когда я касаюсь строки, отображается страница сведений об элементе в выбранной строке. Когда я делаю это, а затем нажимаю в ответ, некоторые из строк, которые были обрезаны, теперь отображаются полностью, в то время как другие записи либо остаются обрезанными и / или есть записи, которые не были обрезаны, но теперь обрезаны.

На рисунке по ссылке ниже показаны 2 снимка экрана. Одна слева находится перед открытием страницы сведений, а другая — после возврата со страницы сведений:

2 снимка экрана; левый — перед отображением страницы сведений, правый — после

Я довольно новичок в Xamarin Forms, поэтому, вероятно, я упускаю что-то основное. Случайность того, какие записи обрезаны, действительно озадачивает меня. Любая помощь была бы признательна.

Вот XAML для фрейма и ListView:

 <!-- items list -->
<Frame  x:Name="ListFrame"                
    Grid.Row="3"    
    VerticalOptions="Fill"
    HorizontalOptions="Fill"
    OutlineColor="Black" 
    Padding="5"
    Margin="4"
    >
    <ListView x:Name="ItemsListView"
        ItemsSource="{Binding Items}"
        SelectedItem="{Binding SelectedCryptoItem}"
        IsRefreshing="{Binding IsRefreshingList}"
        RefreshCommand="{Binding RefreshListCommand}"
        ItemSelected="OnItemSelected"
        CachingStrategy="RecycleElement"
        VerticalScrollBarVisibility="Always"
        RowHeight="24"
        IsPullToRefreshEnabled="True"
        >
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Label Text="{Binding Name}" 
                        LineBreakMode="NoWrap"
                        FontSize="Medium"
                        FontAttributes="Bold" 
                        HorizontalOptions="StartAndExpand"
                        VerticalOptions="CenterAndExpand"
                        />
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Frame>
  

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

1. попробуйте использовать FillAndExpand для HoritzontalOptions

2. Привет, добавляю BackgroundColor="Red" для Lable , тогда поделись скриншотом здесь. Я проверю это.

3. @Jason Ты попал в точку — спасибо!

4. @Jason Если вы добавите свой ответ в ответ, я был бы рад пометить его как принятый ответ

Ответ №1:

Глядя на ваш код, VerticalOptions и HorizontalOptions не оптимизированы и могут давать ошибки (в отношении повторного использования ячеек с разными текстами ?). Вы должны использовать HorizontalTextAlignment и VerticalTextAlignment, как рекомендовано здесь https://kent-boogaart.com/blog/jason-smith’s-xamarin-forms-performance-tips. Затем элемент управления Label будет использовать все пространство, и текст будет выровнен так, как вы хотите.

Позже вы, вероятно, встроите эту метку в сетку или другой макет, если вам нужна более сложная ячейка (с несколькими элементами управления)

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

1. Руди — Спасибо за подсказку и ссылку — какой отличный набор советов по оптимизации производительности!