【问题标题】:How to get the TextColor value of a TableSection in my ViewModel Renderer in Xamarin如何在 Xamarin 的 ViewModel 渲染器中获取 TableSection 的 TextColor 值
【发布时间】:2020-10-26 05:06:54
【问题描述】:

我正在使用下面的代码在我的CustomTableView 蓝色(具体为 DodgerBlue)的 TableSections 中制作文本,并将文本设为粗体。

assembly: ExportRenderer(typeof(CustomTableView), typeof(CustomTableViewRenderer))]
namespace MyApp.iOS.CustomRenderers
{
    public class CustomTableViewRenderer : TableViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<TableView> e)
        {
            base.OnElementChanged(e);
            if (Control == null)
                return;

            var tableView = Control as UITableView;
            var customTableView = Element as CustomTableView;
            tableView.WeakDelegate = new CustomHeaderTableModelRenderer(customTableView);
        }

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


        private class CustomHeaderTableModelRenderer : UnEvenTableViewModelRenderer
        {
            private readonly CustomTableView _customTableView;
            public CustomHeaderTableModelRenderer(TableView model) : base(model)
            {
                _customTableView = model as CustomTableView;
            }

            public override UIView GetViewForHeader(UITableView tableView, nint section)
            {
                return new UILabel()
                {   
                    Text = TitleForHeader(tableView, section),
                    TextColor = UIColor.FromRGB(30, 114, 255), //Issue is here
                    Font = UIFont.BoldSystemFontOfSize(new nfloat(22.0)),
                };
            }
        }
    }
}

我遇到的问题是,我不想为带有 RGB 值的标题中的文本设置 TextColor 并强制它始终为 DodgerBlue,我想从每个的 TextColor 属性中获取颜色TableSection 并改用它(这将允许我在其他地方重用这个CustomTableView,因为我可以随意更改颜色)。任何关于我如何做到这一点的想法将不胜感激

【问题讨论】:

    标签: c# xamarin xamarin.forms xamarin.ios custom-renderer


    【解决方案1】:

    使用下面的代码可以做到这一点:

    private class CustomHeaderTableModelRenderer : UnEvenTableViewModelRenderer
    {
        private readonly CustomTableView _customTableView;
        public CustomHeaderTableModelRenderer(TableView model) : base(model)
        {
            _customTableView = model as CustomTableView;
        }
        
        public override UIView GetViewForHeader(UITableView tableView, nint section)
        {
            var tableSectionColor = View.Model.GetSectionTextColor((int) section); // This line gets the Color of the Text in the TitleSection.
            if (tableSectionColor.IsDefault)
            {
                return new UILabel()
                {   
                    Text = TitleForHeader(tableView, section),
                    Font = UIFont.BoldSystemFontOfSize(new nfloat(22.0)),
                };
            }
    
            return new UILabel()
            {   
                Text = TitleForHeader(tableView, section),
                TextColor = tableSectionColor.ToUIColor(), //Use the color here.
                Font = UIFont.BoldSystemFontOfSize(new nfloat(22.0)),
            };
    
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2013-11-23
      相关资源
      最近更新 更多