Reputation: 1379
I'm trying to create a StackLayout
custom renderer, and according to the documentation, the base renderer is a ViewRenderer
.
So I ended up with this for iOS:
public class MyCustomStackLayout : StackLayout { }
public class MyCustomStackLayoutRenderer : ViewRenderer<MyCustomStackLayout, UIView>
{
protected override void OnElementChanged(ElementChangedEventArgs<ExportableStackLayout> e)
{
base.OnElementChanged(e);
// some customizations here that don't mess with BackgroundColor at all
// removing all customizations doesn't fix the issue either.
}
}
And I'm using it like this in my XAML:
<custom:MyCustomStackLayout BackgroundColor="Green">
</custom:MyCustomStackLayout>
Almost everything is working fine, the renderer is registered correctly and it behaves like a StackLayout
, even allowing for Orientation
to change, but for some reason the BackgroundColor
set in my MyCustomStackLayout
, is ignored, so it is always transparent.
I couldn't find exactly where in the codebase the Renderer for the original StackLayout
is registered, as it is not registered in the AssemblyInfo with the other renderers, so I'm not 100% sure I'm doing the right thing here.
Is there something I'm missing that is making the BackgroundColor
get ignored? Am I using the correct Renderer for StackLayout
? Does anybody know where exactly it gets registered?
Update: I do know how to implement the BackgroundColor, I'm actually interested in understanding why it doesn't work in the first place. Since I'm using the same renderer from the original StackLayout, which already implements this.
Upvotes: 4
Views: 1120
Reputation: 18861
It seems a design issue of ViewRenderer . You could add the following code in the renderer .
protected override void SetBackgroundColor(Color color)
{
base.SetBackgroundColor(color);
if (NativeView == null)
return;
if (color != Color.Default)
NativeView.BackgroundColor = color.ToUIColor();
}
Upvotes: 2