#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. Руди — Спасибо за подсказку и ссылку — какой отличный набор советов по оптимизации производительности!