在我的 MainPage.xaml (即 ContentPage )中,我有一个 GradientColorStack 。
<local:GradientColorStack x:Name="ColorStack" StartColor="#FF0000" EndColor="#FFFF00">
该类具有 StackLayout 作为基类,它呈现的背景具有渐变颜色填充。我是从here得到这个想法的。
public class GradientColorStack : StackLayout
问题在于,在更改设备方向时,不会重新绘制背景色填充。因此,在横向方向上,会有一个很大的黑色填充间隙,您可以在其中通过GradientColorStack看到ContentPage背景。
是否有一种方法可以在设备方向更改时强制GradientColorStack重新绘制?
答案 0 :(得分:0)
您可以在 android 渲染器中使用 ForceLayout(),在 iOS 渲染器中使用 SetNeedDisplay()正在强制刷新布局。
答案 1 :(得分:0)
iOS版本
我在渲染器类中添加了以下方法:
class Person {
constructor(name, age) {
this._name = name;
this._age = age;
}
get name() {
return this._name;
}
get age() {
return this._age;
}
set age(num) {
if (num.isNaN()) {
console.log('error!')
} else {
this._age = num
}
}
}
let human = new Person('Armand', 'string');
console.log(human);
这将导致在屏幕方向事件上调用同一类的protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
SetNeedsDisplay();
base.OnElementPropertyChanged(sender, e);
}
方法。现在,在Draw()
中,找到现有的 CAGradientLayer (如果存在)并将其从超级层中删除,然后让Draw()
例程然后计算一个新的 CAGradientLayer ,然后将其照常添加到NativeView.Layer.Sublayers集合中。
感谢@SHUBHAM SHARMA提供使用Draw()
的技巧,但也需要this post才能使解决方案正常工作。
Android版本
事实证明,Android版本已经可以正确重绘渐变层(请参见tutorial)。我认为这是由于渲染器类中的以下方法所致:
SetNeedsDisplay()