【问题标题】:How can I remove the space at the top of this Xamarin grid layout?如何删除此 Xamarin 网格布局顶部的空间?
【发布时间】:2020-10-27 10:56:41
【问题描述】:

我需要一个遥控器应用程序上的方形按钮嵌套,经过多次尝试,创建了以下内容页面和类。

请问我怎样才能摆脱网格顶部的空间(在屏幕截图中显示为红色)?

内容页面

     <StackLayout BackgroundColor="Black" VerticalOptions="StartAndExpand">

      <Label x:Name="MyAwesomeLabel" FontSize="60" FontAttributes="Bold"  Text="Label" TextColor="White" HorizontalTextAlignment="End" VerticalTextAlignment="Center"  LineBreakMode="NoWrap" BackgroundColor="Blue" Margin="12, 12, 12, 0"/>

      <Grid x:Name="MyAwesomeGrid" RowSpacing="1" ColumnSpacing="1" Padding="0, -40, 0, 0" Margin="0" HorizontalOptions="CenterAndExpand" VerticalOptions="EndAndExpand" BackgroundColor="Red">

          <Grid.RowDefinitions>
               <RowDefinition Height="1"/>
               <RowDefinition Height="1"/>
               <RowDefinition Height="1"/>
               <RowDefinition Height="1"/>
               <RowDefinition Height="1"/>
          </Grid.RowDefinitions>

          <Grid.ColumnDefinitions>
               <ColumnDefinition Width="1"/>
               <ColumnDefinition Width="1"/>
               <ColumnDefinition Width="1"/>
               <ColumnDefinition Width="1"/>
          </Grid.ColumnDefinitions>

          <ImageButton Grid.Row="1" Grid.Column="0" Source="A.xml"/>
          <ImageButton Grid.Row="1" Grid.Column="1" Source="B.xml"/>
          <ImageButton Grid.Row="1" Grid.Column="2" Source="C.xml"/>
          <ImageButton Grid.Row="1" Grid.Column="3" Source="D.xml"/>

          <ImageButton Grid.Row="2" Grid.Column="0" Source="E.xml"/>   
          <ImageButton Grid.Row="2" Grid.Column="1" Source="F.xml"/>
          <ImageButton Grid.Row="2" Grid.Column="2" Source="G.xml"/>
          <ImageButton Grid.Row="2" Grid.Column="3" Source="H.xml"/>

          <ImageButton Grid.Row="3" Grid.Column="0" Source="I.xml"/>
          <ImageButton Grid.Row="3" Grid.Column="1" Source="J.xml"/>
          <ImageButton Grid.Row="3" Grid.Column="2" Source="K.xml"/>
          <ImageButton Grid.Row="3" Grid.Column="3" Source="L.xml"/>

          <ImageButton Grid.Row="4" Grid.Column="0" Source="M.xml"/>   
          <ImageButton Grid.Row="4" Grid.Column="1" Source="N.xml"/>
          <ImageButton Grid.Row="4" Grid.Column="2" Source="O.xml"/>
          <ImageButton Grid.Row="4" Grid.Column="3" Source="P.xml"/>

          <ImageButton Grid.Row="5" Grid.Column="0" Source="Q.xml"/>
          <ImageButton Grid.Row="5" Grid.Column="1" Source="R.xml"/>
          <ImageButton Grid.Row="5" Grid.Column="2" Source="S.xml"/>
          <ImageButton Grid.Row="5" Grid.Column="3" Source="T.xml"/>
      </Grid>
 </StackLayout>

页面类

      public MyAwesomeApp()
  {
       InitializeComponent();
       double size = DeviceDisplay.MainDisplayInfo.Width / 12;
       foreach(ColumnDefinition col in buttons.ColumnDefinitions)
       {
            col.Width = size;
       }
       foreach(RowDefinition row in buttons.RowDefinitions)
       {
            row.Height = size;
       }
  }

结果

网格背景颜色为红色,因此空间绝对是网格的一部分。

【问题讨论】:

  • 将 StackLayout 上的间距设置为 0
  • 您还将 VerticalOptions 设置为 EndAndExpand
  • 谢谢@Jason。我这样做了: 但我仍然有一个很大的红色空间。
  • 您的网格不够大,无法填充空白空间,因此必须使用一些东西来填充它。您可以尝试将其中一个网格行设置为自动。

标签: android xaml xamarin.forms


【解决方案1】:

这是你的罪魁祸首

您从 Row="1" 而不是 Row="0"

开始
<ImageButton Grid.Row="1" Grid.Column="0" Source="A.xml"/>

顶部的空间是第 0 行,网格自动创建第 6 行,现在您的页面有 6 行而不是 5 行。

将 1 更改为 0,将 2 更改为 1 等等......您将获得所需的结果并删除不再需要的负填充。

<ImageButton Grid.Row="0" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
...
<ImageButton Grid.Row="1" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
...
<ImageButton Grid.Row="2" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
...
<ImageButton Grid.Row="3" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
...
<ImageButton Grid.Row="4" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>

【讨论】:

  • 舒巴姆,谢谢。第 0 行曾经有另一个标签。这完美地回答了我的问题(尽管现在应用程序没有填满整个屏幕)。我拒绝了你的编辑,因为我觉得我应该展示我尝试过的实际代码。
  • @sanepete app fill issue 为此发布另一个问题,我会尝试回答它
  • Shubham,我要先自己修复一下。不过还是谢谢。
【解决方案2】:

您可以使用 View-to-View 绑定来设置 ImageButton 的大小。这样你就不需要再在后面的代码中设置它了。

<StackLayout BackgroundColor="Black" VerticalOptions="StartAndExpand">

        <Label x:Name="MyAwesomeLabel" FontSize="60" FontAttributes="Bold"  Text="Label" TextColor="White" HorizontalTextAlignment="End" VerticalTextAlignment="Center"  LineBreakMode="NoWrap" BackgroundColor="Blue" Margin="12, 12, 12, 0"/>

        <Grid x:Name="MyAwesomeGrid" RowSpacing="1" ColumnSpacing="1" Padding="1"  HorizontalOptions="CenterAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Red">

            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <ImageButton x:Name="btn1" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Row="0" Grid.Column="0" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="0" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="0" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="2" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="0" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="3" BackgroundColor="LightBlue"/>

            <ImageButton Grid.Row="1" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="0" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="1" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="1" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="2" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="1" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="3" BackgroundColor="LightBlue"/>

            <ImageButton Grid.Row="2" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="0" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="2" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="2" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="2" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="2" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="3" BackgroundColor="LightBlue"/>

            <ImageButton Grid.Row="3" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="0" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="3" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="3" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="2" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="3" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="3" BackgroundColor="LightBlue"/>

            <ImageButton Grid.Row="4" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="0" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="4" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="1" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="4" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="2" BackgroundColor="LightBlue"/>
            <ImageButton Grid.Row="4" HeightRequest="{Binding Width, Source={x:Reference btn1}}" Grid.Column="3" BackgroundColor="LightBlue"/>
        </Grid>
    </StackLayout>

【讨论】:

  • 但现在空间低于所有剩余高度后需要使用标签
  • 把所有的都去掉,只保留整个页面的网格,顶部会有那个空间,这是为什么呢
  • 你想达到什么效果?
  • 看我的回答@lucas
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 2019-08-09
  • 1970-01-01
  • 2015-04-17
  • 2012-04-13
  • 1970-01-01
  • 2018-05-29
  • 2019-01-11
相关资源
最近更新 更多