• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Xamarin Forms 自定义渲染器 ios

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:04:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试创建自定义控件。 下面是我的代码

public class BoxControlRenderer:ViewRenderer<BoxControl,BoxControlView>
    {
        BoxControlView boxControlView;

        protected override void OnElementChanged (ElementChangedEventArgs<BoxControlView> e)
        {
            base.OnElementChanged (e);
            this.lineControlView = new BoxControlView (this.Bounds);
            this.SetNativeControl(this.boxControlView); 
        }


        protected override void OnElementPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged (sender, e);

            if (e.PropertyName == BoxControlView.BoxControlProperty.PropertyName)
            {
                this.boxControlView.BoxControlProperty = this.Element.CheckedValue;
            }
        }

    }

我的 BoxControlView View :

[Register("BoxControlView")]
    public class BoxControlView :UIView
    {
        UIImageView imageView;

        BoxControl _control;

        [Export("initWithFrame:")]
        public BoxControlView(CGRect bounds)
            : base(bounds)
        {
            imageView = new UIImageView (new CGRect (0, 0, 40, 18));
        }

        private bool _boxControlProperty;

        public bool BoxControlProperty
        {
            get {
                return _boxControlProperty;
                }
            set{ 
                value = _boxControlProperty;
                OnPropertyChanged ("BoxControlProperty");
                SetNeedsDisplay ();

            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler (this, new PropertyChangedEventArgs (propertyName));
        }

        public override void Draw (CoreGraphics.CGRect rect)
        {
            base.Draw (rect);

            this.BackgroundColor = UIColor.Green;

            BoxControlProperty = _control.CheckedValue;

            Action OnImageViewTapped = () => {
                if(BoxControlProperty)
                    imageView.Image = UIImage.FromFile("test1.png");
                else
                    imageView.Image = UIImage.FromFile("test2.png");
            };

            var tapGesture = new UIGestureRecognizer ();
            tapGesture.AddTarget (OnImageViewTapped);
            imageView.AddGestureRecognizer (tapGesture);
        }
    }

BoxControl:

public class BoxControl :View
    {

        public static readonly BindableProperty BoxControlProperty = BindableProperty.Create<BoxControl, bool>(z=>z.CheckedValue,false);

        public bool CheckedValue
        {
            get{
                return (bool)GetValue (BoxControlProperty);
            }
            set{ 
                SetValue (BoxControlProperty, value);
            }
        }

    }

在上面的代码中,onDraw 方法没有被调用。 如果我们在

中保留任何断点,则在调试 Xamarin Studio 时会崩溃
protected override void OnElementChanged (ElementChangedEventArgs<CheckBoxControl> e) method or Draw method.



Best Answer-推荐答案


渲染器文件顶部是否有 DependencyService 导出行?

类似于:

[assembly: ExportRenderer (typeof (BoxControl ), typeof (BoxControlRenderer))]

我没有看到它,所以我不得不问。再说一次,我还没有使用最新版本的 Xamarin.Forms (1.3)。这就是我为示例项目定制渲染器的方式:http://www.joesauve.com/using-xamarin-auth-with-xamarin-forms/ .在页面下方约 1/3 处查找 iOS 部分。

关于ios - Xamarin Forms 自定义渲染器 ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29172388/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap