微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义控件在行定义中将高度设置为自动时占用全部空间

如何解决自定义控件在行定义中将高度设置为自动时占用全部空间

我尝试在 OnMeasure 方法中返回相同的大小。如果我将自定义控件的 RowDeFinition 值设置为 auto,则自定义控件也会在下一行定义空间中呈现。

自定义控件呈现 3 行和 4 行,而第 4 行控件在屏幕上不可见。

示例:CustomControl sample

[Xaml]

<Grid ColumnDeFinitions="*,0.3*" RowDeFinitions="auto,200,auto,auto">
          <Button BackgroundColor="Blue" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" ></Button>
          <Button BackgroundColor="Green" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" ></Button>
      
          <local:MyBoxView  BackgroundColor="Red" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" />
           
          <Button Text="Button" BackgroundColor="brown" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" />


     </Grid>

[C#]

public class MyBoxView : BoxView
{
    public MyBoxView()
    {



    }
    protected override SizeRequest OnMeasure(double widthConstraint,double heightConstraint)
    {
        return new SizeRequest(new Size(widthConstraint,heightConstraint));
    }
}

当我在网格视图中添加自定义(MyBoxview)控件时,意味着工作正常。请就此提出任何建议。

解决方法

BoxView Class 开始,BoxView 的默认大小请求为 40x40。所以你不需要覆盖 SizeRequest OnMeasure。

请移除 SizeRequest OnMeasure 方法,然后您将获得相同大小的框视图。

 public class MyBoxView : BoxView
{
    public MyBoxView()
    {

    }
   
}

更新:

可能会调用 OnMeasure 方法,具体取决于 MyBoxView 的放置位置以及任何外部布局的约束。例如,如果 MyBoxView 位于 Grid.Row 内并且该行高为“*”,则不会调用 OnMeasure。当外部布局询问“您需要多少空间?”时,会调用 OnMeasure。在“*”的情况下,我们可以更像是“这是你有多少空间”。

在调用 OnMeasure 的情况下,widthConstraint 或 heightConstaint 可能设置为无穷大。例如,如果 MyBoxView 位于 StackLayout 内,则纵向的 StackLayout 将不会限制高度,因此 heightConstraint 将设置为无穷大。同样,对于横向,widthConstraint 将设置为无穷大。因此,当您计算从 OnMeasure 返回的 SizeRequest 时,您将需要处理无穷大的情况。

这个 MyBoxView 将使用所有可用的宽度或高度来创建一个正方形的布局空间。因此,在这种布局在具有“自动”大小的 GridLayout 中的情况下,MyBoxView 只会说它需要基于两者中的最小值的相等的宽度和高度。

所以最好的方法是设置RowDefinitions height=value或者直接设置MyBoxView的高度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。