c# - 如何在运行时在 xamarin.forms 中更改相对布局中视图的位置或大小
问题描述
我所做的是通过设置所有约束为相对布局添加了一个标签。
下面是我的代码。
relativeLayout.Children.Add(textLabel, Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
{
return sibling.Width * 0.55;
}), Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
{
return sibling.Y;
}), Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
{
return sibling.Width * .45;
}), Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
{
return sibling.Height;
}));
它工作得很好。
现在我想动态更改 label(textLabel) X Constraint 和 Width Constraint。例如,从上面的代码中 X Constraint issibling.Width * 0.55
和 width is sibling.Width * .45
,那么需要改为 X assibling.Width * 0.55 + 10
和 width is sibling.Width * .45 - 50
。怎么做?
我的猜测是可以通过删除相对布局的标签并再次添加到具有新约束的相对布局来完成。但我认为会有更好的解决方案。
解决方案
正如@LeoZhu-MSFT 评论,它对我来说非常有效。这是我解决问题的方法
对于我的问题,
现在我想动态更改 label(textLabel) X Constraint 和 Width Constraint。例如,从上面的代码中,X 约束是兄弟。宽度 * 0.55 和宽度是兄弟。宽度 * .45,然后需要将 X 更改为兄弟。宽度 * 0.55 + 10 和宽度是兄弟.宽度 * .45 - 50 。 怎么做?
更改 X 约束
RelativeLayout.SetXConstraint(textLabel, Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
{
return sibling.Width * 0.55 + 10;
}));
更改宽度约束
RelativeLayout.SetWidthConstraint(textLabel, Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
{
return sibling.Width * .45 - 50;
}));
有关更多详细信息
RelativeLayout.SetWidthConstraint => https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.relativelayout.setwidthconstraint?view=xamarin-forms RelativeLayout.SetXConstraint => https://docs.microsoft.com /en-us/dotnet/api/xamarin.forms.relativelayout.setxconstraint?view=xamarin-forms
推荐阅读
- python - /usr/bin/python3:没有名为 pytest 的模块
- twincat - 具有完全访问权限的 TwinCAT 3.1 fCoE 读写
- git - Docker 在 gitlab CI 中构建当前 git 分支
- hid - iOS 主页按钮的 HID 描述符 + 报告?
- mysql - 解决导入数据库上的特定 mysql 错误
- python - 如何在 SQLAlchemy 中使用 PostgreSQL 的 jsonb_to_record?
- java - 检查Java列表中是否有连续点大于阈值
- javascript - client.elements 不能从使用 nightwatch-api 的步骤定义中工作
- java - 如何从用于 addValueEventListener 的 for 循环内的查询中获取字符串值
- java - 在 Kubernetes 集群上运行时,Solace JMS 通道自行关闭(Spring Boot)