2016-10-24 1 views
0

レイアウトクラスのいずれかにカスタムレンダラーを書き込もうとすると、「コントロール」プロパティがnullと表示されます。レンダラーはすでにネイティブコントロールのラッパーであるため、問題はありませんが、エフェクトを作成するときは問題ありません。コントロールプロパティが割り当てられていないので、エフェクトを使ってレイアウトクラスをカスタマイズすることはできません。これはバグですか?レイアウトのカスタムレンダラーとエフェクトの「コントロール」プロパティ

答えて

0

レイアウトにはレンダラーがなく、レンダラーもネイティブビューもないため(Controlはありません)、Effectで変更することはできません。

+0

を働い、彼らが持っているヌル制御を返さ/カスタムレンダラー/レンダラー/。それらはiOSのAndroidおよびUIView派生物のView派生物です。 –

+0

彼らは「持っている」。たとえば、BoxViewのカスタムレンダラーを使用しています。テーブルに指定されているレンダラー "Element.ViewGroup"からアクセスできます。しかし、 "コントロール"はnullです。 –

0

PlatformEffectクラスはContainerと呼ばれる別のプロパティを持っています。このプロパティは、Controlがnullの場合にも使用できます。レイアウトで。

0

私は元の投稿と同じ問題を見ました。

私はiOSのPlatformEffect<UIView, UILabel>を継承していました。私がデバッグしていたとき、コントロールはnullでした。私はPlatformEffectから継承するために私のエフェクトを変更し、コントロールを((UILabel)Control)としてキャストし、すべてが機能し始めました。 https://developer.xamarin.com/guides/xamarin-formsを:

MultilineTruncateLabelEffect : PlatformEffect<UIView, UILabel> 
{ 
    protected override void OnAttached() 
    { 
     var effect = (MultilineEffect) Element.Effects.FirstOrDefault(e => e is MultilineEffect); 
      if (effect != null) 
      { 
       Control.Lines = effect.Lines; 
      } 
    } 
} 

このリンクによるファイン

public class MultilineTruncateLabelEffect : PlatformEffect 
{ 
    protected override void OnAttached() 
    { 
     var effect = (MultilineEffect) Element.Effects.FirstOrDefault(e => e is MultilineEffect); 
     if (effect != null) 
     { 
      ((UILabel)Control).Lines = effect.Lines; 
     } 
    } 
} 
関連する問題