【问题标题】:OnElementChanged method is not there to override CollectionViewRenderer in XamarinOnElementChanged 方法无法覆盖 Xamarin 中的 CollectionViewRenderer
【发布时间】:2020-06-30 06:33:12
【问题描述】:

我需要在 Xamarin 表单中为 CustomCollectionViewRenderer 创建自定义控件,因为我需要在 Xamarin 表单中显示像 Pinterest 应用程序这样的图像集合。但是 OnElementChanged 并不能覆盖 CollectionViewRenderer。我在这里做错了吗?

我正在使用

  • Xamarin.Forms NuGet 包版本为 4.0.2.70
  • Visual Studio Community 2019 for Mac 版本 8.3.4(内部版本 8)
  • NuGet 版本:5.3.0.6192
  • Xamarin.iOS 版本:13.4.0.2(Visual Studio 社区)
  • Xamarin.Android 版本:10.0.3.0(Visual Studio 社区)
    [assembly: ExportRenderer(typeof(CollectionView), typeof(CustomCollectionViewRenderer))]
    namespace MyProj.Droid
    {
        public class CustomCollectionViewRenderer : CollectionViewRenderer
        {
            public CustomCollectionViewRenderer(Context context) : base(context)
            {
            }


            protected override void OnElementChanged(ElementChangedEventArgs<ItemsView> elementChangedEvent)
                {
                    base.OnElementChanged(elementChangedEvent);

                    if (elementChangedEvent.NewElement != null)
                    {
                       StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.Vertical);
                        SetLayoutManager(manager);
                   }
               }
            }
        }

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.android


    【解决方案1】:

    我刚刚在我的 VS19 for MAC 中做了同样的事情,配置如下,一切正常

    using Android.Content;
    using Android.Support.V7.Widget;
    using Test.Droid.PlatformRenderer;
    using System.ComponentModel;
    using Xamarin.Forms;
    using Xamarin.Forms.Platform.Android;
    
    [assembly: ExportRenderer(typeof(CollectionView), typeof(CustomCollectionViewRenderer))]
    
    namespace Test.Droid.PlatformRenderer
    {
        public class CustomCollectionViewRenderer : CollectionViewRenderer
        {
            public CustomCollectionViewRenderer(Context context) : base(context)
            {
            }
    
            protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs changedProperty)
            {
                base.OnElementPropertyChanged(sender, changedProperty);
            }
    
            protected override void OnElementChanged(ElementChangedEventArgs<ItemsView> elementChangedEvent)
            {
                base.OnElementChanged(elementChangedEvent);
                if (elementChangedEvent.NewElement != null)
                {
                    StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.Vertical);
                    SetLayoutManager(manager);
                }
            }
        }
     }
    

    VS 配置:

    Xamarin.Forms NuGet 包版本 4.5.0.356

    Visual Studio Professional 2019 for Mac 版本 8.3.4(内部版本 8)

    NuGet 版本:5.3.0.6192

    Xamarin.iOS 版本:13.4.0.2

    Xamarin.Android 版本:10.0.3.0

    所以我猜你需要最新的 XF!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多