代码之家  ›  专栏  ›  技术社区  ›  robbpriestley

Xamarin窗体重新绘制设备方向更改时的堆栈布局

  •  0
  • robbpriestley  · 技术社区  · 7 年前

    在我的 主页 ,这是一个 内容页 我有一个 渐变色堆栈 .

    <local:GradientColorStack x:Name="ColorStack" StartColor="#FF0000" EndColor="#FFFF00">
    

    这个班有 堆栈布局 作为一个基本类,它提供了一个具有渐变颜色填充的背景。我是从 here .

    public class GradientColorStack : StackLayout
    

    问题是,在设备方向改变时,背景色填充不会重新绘制。因此,在横向,有一个很大的空白填充黑色,你可以通过渐变颜色堆栈看到内容页背景。

    是否有方法强制GradientColorStack在设备方向更改时重新绘制?

    2 回复  |  直到 7 年前
        1
  •  0
  •   SHUBHAM SHARMA    7 年前

    你可以使用 FracelayOUT() 在里面 安卓 渲染器和 设置需要显示() 在里面 网间网操作系统 渲染器,因为这些函数强制刷新布局。

        2
  •  0
  •   robbpriestley    7 年前

    iOS版本

    我在渲染器类中添加了以下方法:

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        SetNeedsDisplay();
        base.OnElementPropertyChanged(sender, e);
    }
    

    这导致了 Draw() 要在屏幕方向事件上调用的同一类的方法。在 () 我现在找到了现有的 碳纤维层 (如果存在)并将其从超级层中移除,然后让 () 例行程序,然后计算新的 碳纤维层 像往常一样,然后像往常一样添加到nativeview.layer.sublayers集合中。

    感谢@shubham sharma提供的使用技巧 SetNeedsDisplay() 但是 this post 也需要解决方案。


    安卓版本

    事实证明,Android版本已经在正确地重新绘制渐变层(请参见 tutorial )我认为这是因为我的渲染器类中有以下方法:

    protected override void OnElementChanged(ElementChangedEventArgs<StackLayout> e)
    {
        base.OnElementChanged(e);
    
        if (e.OldElement != null || Element == null)
        {
            return;
        }
    
        var stack = e.NewElement as GradientColorStack;
        this.StartColor = stack.StartColor;
        this.EndColor = stack.EndColor;
    }