如何将自动填充设置为网格列宽

时间:2018-12-07 09:57:54

标签: xamarin xamarin.forms grid

我有一个只有一行的网格,其高度为GridLength.Star。 在第一列中,我有一个svg填充单元格。 在第二栏中,我有一个标签。

svg是一个正方形,应该代替它在垂直和水平方向上填充,但不能更多。 标签应采用其余宽度。

我尝试设置

<tagName></tagName>

但是它总是在中间分开。

所以我得到了

svg .......... |标签........

代替(我想要的):

svg |标签.........

有什么想法吗?

更新

column1.Width = GridLength.Auto;
column2.Width = GridLength.Star;

更新2

对不起,它不是Fill,而是CenterAndExpand

3 个答案:

答案 0 :(得分:1)

我得到了答案。我只需要将svg的高度设置为其widthRequest:

 svgImage.WidthRequest = svgImage.Height;
 column1.Width = GridLength.Auto;
 column2.Width = GridLength.Star;
 grid.Children.Add( svgImage, 0, 0 );
 grid.Children.Add( label, 1, 0 );

答案 1 :(得分:0)

好吧,实际上它很简单,其背后的原因是GridLength.Auto,您所要做的就是将Grid列定义更改为以下内容:

XAML

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="1*"/> // svg
  <ColumnDefinition Width="4*"/> // label
</Grid.CoulmnDefinitions>

C#

Grid grid= new Grid
{
    ColumnDefinitions = 
            {
               new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, 
               new RowDefinition { Height = new GridLength(4, GridUnitType.Star) },
            }
}

grid.Children.Add(svgImage, 0, 0);
grid.Children.Add(label, 0, 1);

答案 2 :(得分:0)

移动:

grid.Children.Add( svgImage );
grid.Children.Add( label );

到设置行/列定义之后,然后更改为:

grid.Children.Add(svgImage, 0, 0);
grid.Children.Add(label, 0, 1);

基本上,您必须告诉网格要放置元素的行/列。通过在初始化列定义之前将它们添加到网格中,ColumnDefinition的默认设置为GridLength.Star


我整理了您的代码。请注意,我已经更改了Height分配。

Label label = new Label()
{
   Text = "Some text" // Just some placeholder text
};

SvgCachedImage svgImage = new SvgCachedImage()
{
    HorizontalOptions = LayoutOptions.CenterAndExpand,
    VerticalOptions = LayoutOptions.CenterAndExpand
};

Grid grid = new Grid();

// NOTE: use GridLength class to set the Height/Width of rows/columns
RowDefinition row = new RowDefinition()
{
    Height = new GridLength(1, GridUnitType.Star)
}
ColumnDefinition column1 = new ColumnDefinition()
{
    Width = new GridLength(1, GridUnitType.Auto)
}
ColumnDefinition column2 = new ColumnDefinition()
{
    Width = new GridLength(1, GridUnitType.Star)
}

// Use existing instances of the definitions
grid.RowDefinitions.Add(row1);
grid.ColumnDefinitions.Add(column1);
grid.ColumnDefinitions.Add(column2);

grid.Children.Add(svgImage, 0, 0);
grid.Children.Add(label, 1, 0);

在我输入时,我注意到您只是将Width属性设置为GridLength.Star/Auto。根据{{​​3}},您应该使用GridLength ,而不是枚举。