2016-06-07 31 views
2

作爲嘗試學習Xamarin的另一步,我正在開發一個測試項目,以瞭解如何在Xamarin多平臺項目上繪製形狀(完整的github代碼here)。在Xamarin中覆蓋ViewRenderer

該項目試圖重現這個其他github項目(鏈接here),但使用新的空白Xamarin Forms項目來代替。然後,我嘗試將原始代碼的各部分放在一起,並嘗試理解它們。

專注於Android,將代碼放在一起後,形狀繪製不正確。我試圖解決這個問題,我認爲這一切都歸結於此:

原始項目中出現OnElementChanged的斷點(請參閱源文件here)。但是在我的新項目中沒有達到OnElementChanged的斷點(請參閱源文件here)。

SharpRenderer存在於.Droid和.iOS項目中,但我無法理解代碼是如何互連的。我似乎沒有發現兩個代碼之間有意義的區別,這些代碼可以幫助我理解正在發生的事情。


SharpRenderer代碼達到一個案件,但不是對方稱:

public class ShapeRenderer : ViewRenderer<ShapeView, Shape> 
{ 
    public ShapeRenderer() 
    { 
    } 

    protected override void OnElementChanged(ElementChangedEventArgs<ShapeView> e) 
    { 
     base.OnElementChanged(e); 

     if (e.OldElement != null || this.Element == null) 
      return; 

     SetNativeControl(new Shape(Resources.DisplayMetrics.Density, Context) 
     { 
      ShapeView = Element 
     }); 
    } 
} 
+0

「_See source file here_」在某個點上肯定是斷開的鏈接。請直接在問題中添加任何必需的和相關的信息。 – Mackan

+1

我已經添加了.Droid項目的'ShapeRenderer'代碼。請讓我知道在主要帖子中是否需要任何其他代碼(因爲錯誤在於項目之間的交互,所以我很難確定哪些部分是必需的,哪些部分不是)。 –

+1

你錯過了這行代碼:'[assembly:ExportRenderer(typeof(ShapeView),typeof(ShapeRenderer))]''。它位於命名空間之上,非常重要。 'ExportRenderer'提醒Xamarin.Forms使用你的類來渲染指定的視圖類,否則Xamarin.Forms將嘗試使用默認的渲染器。 – dylansturg

回答

1

你的代碼中缺少您的渲染器類以上的重要防線:

[assembly:ExportRenderer (typeof(ShapeView), typeof(ShapeRenderer))] 

這意味着,你的類將被導出,然後使用b Xamarin Forms Framework來渲染ShapeView

爲了更好地理解您可以檢查文檔here