Xamarin.Forms:之后更改RelativeLayout约束

测试

RelativeLayout设置一次后,是否可以更改a的约束

在文档中,我看到了类似的方法GetBoundsConstraint(BindableObject),但是我认为只有在拥有XAML文件的情况下才能使用它们。现在,我正在尝试通过代码来实现。null如果我尝试我会得到

RelativeLayout.GetBoundsConstraint(this.label);

我发现的唯一方法是从布局中删除子级,然后再次添加新的约束。

例子:

public class TestPage : ContentPage
{
    private RelativeLayout relativeLayout;
    private BoxView view;
    private bool moreWidth = false;

    public TestPage()
    {
        this.view = new BoxView
        {
            BackgroundColor = Color.Yellow,
        };

        Button button = new Button
        {
            Text = "change",
            TextColor = Color.Black,
        };

        button.Clicked += Button_Clicked;

        this.relativeLayout = new RelativeLayout();

        this.relativeLayout.Children.Add(this.view,
            Constraint.Constant(0),
            Constraint.Constant(0),
            Constraint.Constant(80),
            Constraint.RelativeToParent((parent) =>
            {
                return parent.Height;
            }));

        this.relativeLayout.Children.Add(button,
            Constraint.RelativeToParent((parent) =>
            {
                return parent.Width / 2;
            }),
            Constraint.RelativeToParent((parent) =>
            {
                return parent.Height / 2;
            }));

        this.Content = this.relativeLayout;
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        double width = 0;
        if(this.moreWidth)
        {
            width = 120;
        }
        else
        {
            width = 80;
        }
        var c= BoundsConstraint.FromExpression((Expression<Func<Rectangle>>)(() => new Rectangle(0, 0, width, this.Content.Height)), new View[0]);
        RelativeLayout.SetBoundsConstraint(this.view, c);
        this.relativeLayout.ForceLayout();
        this.moreWidth = !this.moreWidth;
    }
}
基思·罗马

当前版本的Xamarin Forms正式支持此功能。RelativeLayout容器只添加/删除其子女集合( -推测的性能,缓存解决约束)项目时重新计算限制。即使将各种约束实现为可绑定属性,但在更改时仍不会重新计算它们。

我认为这样做的目的是为了有一天遵守约束更新,这对于例如动画很有用,但目前看来并没有这样的效果。

但是,我查看了RelativeLayout的反编译源,并且可能围绕它进行改编-但它可能不符合您的需求,具体取决于您需要多少功能以及约束定义的复杂程度。

请参见以下示例代码(关键部分是使用SetBoundsConstraint设置约束,该约束会覆盖添加的视图的内部计算边界-然后调用ForceLayout()):

public partial class App : Application
{
    public App ()
    {
        var label = new Label {
            Text = "Test",
            HorizontalTextAlignment = TextAlignment.Center,
            VerticalTextAlignment = TextAlignment.Center,
            BackgroundColor = Color.Silver
        };
        var layout = new RelativeLayout ();
        layout.Children.Add (label,
            Constraint.Constant (50),
            Constraint.Constant (100),
            Constraint.Constant (260),
            Constraint.Constant (30));
        MainPage = new ContentPage {
            Content = layout
        };

        var fwd = true;
        layout.Animate ("bounce",
            (delta) => {
                var d = fwd ? delta : 1.0 - delta;
                var y = 100.0 + (50.0 * d);
                var c = BoundsConstraint.FromExpression ((Expression<Func<Rectangle>>)(() => new Rectangle (50, y, 260, 30)), new View [0]);
                RelativeLayout.SetBoundsConstraint(label, c);
                layout.ForceLayout ();
            }, 16, 800, Easing.SinInOut, (f, b) => {
                // reset direction
                fwd = !fwd;
            }, () => {
                // keep bouncing
                return true;
            });
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xamarin.Forms RelativeLayout中将视图水平居中?

来自分类Dev

更改Xamarin Forms XAML按钮的isVisible属性

来自分类Dev

Xamarin Forms:在translateto上更改scrollview的大小

来自分类Dev

在Xamarin.Forms中更改TextColor

来自分类Dev

Xamarin.Forms-更改StatusBar颜色

来自分类Dev

Xamarin.Forms条目更改光标颜色

来自分类Dev

更改父窗口Xamarin.Forms

来自分类Dev

Xamarin中的绝对布局与Relativelayout

来自分类Dev

Xamarin中的绝对布局与Relativelayout

来自分类Dev

没有Xamarin.Forms的Xamarin BeginInvokeOnMainThread

来自分类Dev

没有Xamarin.Forms的Xamarin BeginInvokeOnMainThread

来自分类Dev

Xamarin Forms HttpClient GetAsync

来自分类Dev

Xamarin.Forms GridLayout

来自分类Dev

Xamarin Forms导航问题

来自分类Dev

Xamarin.Forms的图形

来自分类Dev

Xamarin.Forms版本

来自分类Dev

Xamarin.forms OnAppLinkRequestReceived

来自分类Dev

Xamarin.forms OnAppLinkRequestReceived

来自分类Dev

Xamarin Forms Switch XAML

来自分类Dev

Xamarin.Forms(共享)

来自分类Dev

Xamarin Forms DependencyService nullReferenceException

来自分类Dev

Xamarin Forms - 使用 SQLite

来自分类Dev

ionicFramework 与 Xamarin.Forms

来自分类Dev

Xamarin Forms 读取 JSON

来自分类Dev

Xamarin Forms Shell FlyoutItem

来自分类Dev

Xamarin.Forms或Xamarin.Android/Xamarin.IOS

来自分类Dev

更改ActionBar颜色-Xamarin

来自分类Dev

Xamarin.Forms XAML RelativeLayout:定义一个高度,其余高度动态填充

来自分类Dev

更改Xamarin Forms NavigationPage工具栏的高度