#c# #xaml #xamarin #xamarin.forms
#c# #xaml #xamarin #xamarin.forms
Вопрос:
Итак, у меня есть следующий фрагмент кода в XAML:
<TableView Intent="Settings">
<TableRoot>
<TableSection Title="Card Front Side">
<ViewCell>
<StackLayout x:Name="englishSide" Padding="20,0,20,0"
BackgroundColor="Red"
Orientation="Horizontal" VerticalOptions="Center">
<Label Text="English" XAlign="Center"/>
<Image x:Name="englishImage" Source="check.png"
HorizontalOptions="EndAndExpand" IsVisible="false" />
</StackLayout>
</ViewCell>
</TableSection>
</TableRoot>
</TableView>
В моем коде на C # у меня есть следующий код для обработки события отвода:
englishSide.GestureRecognizers.Add(new TapGestureRecognizer
{
NumberOfTapsRequired = 1,
Command = new Command(() =>
{
englishImage.IsVisible = true;
App.Database.UpdateSettings((int)Lang.English, "CardFrontSide");
})
});
Теперь, когда я нажимаю на строку, я заметил, что она не реагирует на мое нажатие немедленно. Затем я понял, что область, в которой может быть применено событие tapped, не занимает всю высоту строки, как показано на изображении ниже (область с красным фоном).
Может кто-нибудь сообщить мне, как я могу заставить его занимать всю высоту строки / ячейки просмотра без изменения высоты ячейки просмотра? Спасибо
Ответ №1:
Для вашего StackLayout
VerticalOptions
параметра установлено значение "Center"
, что означает «Видите это пространство вон там? Просто доберитесь туда где-нибудь посередине, спасибо «.
Это означает, что StackLayout не займет больше места, чем необходимо.
Если вы хотите, чтобы вы StackLayout
заполнили высоту ячейки (которая определяется ListView.RowHeight
), вам нужно установить для нее значение FillAndExpand
(вы можете попробовать разные значения, я не уверен CenterAndExpand
Fill
, будет ли достаточно или).
Если CenterAndExpand
это не работает, вы можете обернуть свой StackLayout
with VerticalOptions="Center"
в другой StackLayout
with FillAndExpand
, чтобы сохранить вертикальный центр текста:
<TableView Intent="Settings">
<TableRoot>
<TableSection Title="Card Front Side">
<ViewCell>
<StackLayout VerticalOptions="FillAndExpand"
x:Name="englishSide"
Padding="20,0,20,0"
BackgroundColor="Red">
<StackLayout Orientation="Horizontal" VerticalOptions="CenterAndExpand">
<Label Text="English" XAlign="Center"/>
<Image x:Name="englishImage" Source="check.png"
HorizontalOptions="EndAndExpand" IsVisible="false" />
</StackLayout>
</StackLayout>
</ViewCell>
</TableSection>
</TableRoot>
</TableView>
Комментарии:
1. Спасибо @Thibault. Но, похоже, это не работает. Внешняя
FillAndExpand
сторонаStackLayout
выполняет трюк, занимаяViewCell
высоту. Но проблема в том, что внутреннийStackLayout
withVerticalOptions="Center
не работает. Текст больше не центрируется.2. Приношу свои извинения @iamsophia, я не тестировал свой код :). Теперь я протестировал и отредактировал свой ответ, и единственное, что вам нужно изменить, это
VerticalOptions
внутреннее стековое описание отCenter
доCenterAndExpand
.