0
私はXamarinフォームプロジェクト(PCL)でカスタムレンダラーを実装しようとしています。私はラベルの角を曲げようとしています。 問題はレンダリングされないということです。私は関連ファイルにデバッグを投げたが、ヒットしているがレンダリングされていないようだ。ここでカスタムレンダラーがXamarinフォームをレンダリングしない
は、ラベルのサブクラスです:
public class CurvedCornersLabel:Label
{
public static readonly BindableProperty CurvedCornerRadiusProperty =
BindableProperty.Create(
nameof(CurvedCornerRadius),
typeof(double),
typeof(CurvedCornersLabel),
12.0);
public double CurvedCornerRadius
{
get { return (double)GetValue(CurvedCornerRadiusProperty); }
set { SetValue(CurvedCornerRadiusProperty, value); }
}
public static readonly BindableProperty CurvedBackgroundColorProperty =
BindableProperty.Create(
nameof(CurvedCornerRadius),
typeof(Color),
typeof(CurvedCornersLabel),
Color.Default);
public Color CurvedBackgroundColor
{
get { return (Color)GetValue(CurvedBackgroundColorProperty); }
set { SetValue(CurvedBackgroundColorProperty, value); }
}
}
これは、Androidのレンダラーです:
[assembly: ExportRenderer(typeof(CurvedCornersLabel), typeof(CurvedCornerLabelRenderer))]
namespace CarouselDemo.Droid
{
public class CurvedCornerLabelRenderer:LabelRenderer
{
private GradientDrawable _gradientBackground;
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (CurvedCornersLabel)Element;
if (view == null) return;
// creating gradient drawable for the curved background
_gradientBackground = new GradientDrawable();
_gradientBackground.SetShape(ShapeType.Rectangle);
_gradientBackground.SetColor(view.CurvedBackgroundColor.ToAndroid());
// Thickness of the stroke line
_gradientBackground.SetStroke(4, view.CurvedBackgroundColor.ToAndroid());
// Radius for the curves
_gradientBackground.SetCornerRadius(
DpToPixels(this.Context,
Convert.ToSingle(view.CurvedCornerRadius)));
// set the background of the label
Control.SetBackground(_gradientBackground);
}
/// <summary>
/// Device Independent Pixels to Actual Pixles conversion
/// </summary>
/// <param name="context"></param>
/// <param name="valueInDp"></param>
/// <returns></returns>
public static float DpToPixels(Context context, float valueInDp)
{
DisplayMetrics metrics = context.Resources.DisplayMetrics;
return TypedValue.ApplyDimension(ComplexUnitType.Dip, valueInDp, metrics);
}
}
}
これはXAMLです:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="CarouselDemo.LabelViewDemo"
xmlns:mr="clr-namespace:MR.Gestures;assembly=MR.Gestures"
xmlns:local="clr-namespace:CarouselDemo;assembly=CarouselDemo"
Padding="10,20,10,10">
<StackLayout Padding="20">
<Label Text="Card 1"
HeightRequest="100"
BackgroundColor="LightGoldenrodYellow"
x:Name="card1"
/>
<local:CurvedCornersLabel Text="Card 2"
HeightRequest="100"
BackgroundColor="LightBlue"
x:Name="card2"
Margin="0,-40,0,0"
CurvedCornerRadius="15"
></local:CurvedCornersLabel>
</StackLayout>
</ContentPage>
任意のアイデア?
この保護されたオーバーライドではありません。OnElementChanged(ElementChangedEventArgs
私はそうは思わない、それだけでエラーをスローするには、 – user3355961
そして、エラーは? –