我有一个只有一行的网格,其高度为GridLength.Star。 在第一列中,我有一个svg填充单元格。 在第二栏中,我有一个标签。
svg是一个正方形,应该代替它在垂直和水平方向上填充,但不能更多。 标签应采用其余宽度。
我尝试设置
<tagName></tagName>
但是它总是在中间分开。
所以我得到了
svg .......... |标签........
代替(我想要的):
svg |标签.........
有什么想法吗?
更新
column1.Width = GridLength.Auto;
column2.Width = GridLength.Star;
更新2
对不起,它不是Fill,而是CenterAndExpand
答案 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
类,而不是枚举。