Как расширить область отвода стекового описания, чтобы занять высоту ячейки просмотра?

#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 with VerticalOptions="Center не работает. Текст больше не центрируется.

2. Приношу свои извинения @iamsophia, я не тестировал свой код :). Теперь я протестировал и отредактировал свой ответ, и единственное, что вам нужно изменить, это VerticalOptions внутреннее стековое описание от Center до CenterAndExpand .