【问题标题】:How to change Color from Slider on Xamarin Mac Platform?如何从 Xamarin Mac 平台上的滑块更改颜色?
【发布时间】:2023-03-04 14:28:01
【问题描述】:

Xamarin Mac 项目上 Slider 的默认颜色是蓝色,我想将其更改为绿色,所以我做了一个自定义渲染器,但不幸的是,我不知道在自定义渲染器中做什么,我该怎么做改变颜色?

using CustomSliderColor.MacOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.MacOS;

[assembly: ExportRenderer(typeof(CustomSlider), typeof(CustomSliderRenderer))]
namespace CustomSliderColor.MacOS
{
    public class CustomSliderRenderer : SliderRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                //What do I put here?????
            }
        }
    }
}

【问题讨论】:

  • 您需要继承 NSSlider 并自己绘制条形图(在 DrawRect...和 ​​DrawCell(?) 我想,我自己已经有一段时间没有这样做了。)然后在您的渲染器。
  • 我找到了一些NSSliderCell子类的例子,如果你有关于如何子类NSSlider的例子请分享。

标签: colors xamarin.forms slider xamarin.mac custom-renderer


【解决方案1】:

我找到了自己问题的答案。

首先继承“NSSliderCell”类,这里是一个例子:

using System;
using AppKit;
using CoreGraphics;
using Foundation;

namespace myproject.MacOs
{
    public class CustomSliderCell : NSSliderCell 
    {
        public override void DrawBar(CGRect aRect, Boolean flipped)
        {
            CGRect rect = aRect;
            rect.Size = new CGSize(rect.Size.Width, 5);
            float barRadius = 2.5f;
            double value = (double)((this.DoubleValue - this.MinValue) / (this.MaxValue - this.MinValue));
            float finalWidth = (float)(value * (this.ControlView.Frame.Size.Width - 8));
            CGRect leftRect = rect;
            leftRect.Size = new CGSize(finalWidth, leftRect.Size.Height);
            NSBezierPath bg = new NSBezierPath();
            bg.AppendPathWithRoundedRect(rect, barRadius, barRadius);
            NSColor.FromRgb(0, 160, 0).SetFill();
            bg.Fill();
            NSBezierPath active = new NSBezierPath();
            active.AppendPathWithRoundedRect(leftRect, barRadius, barRadius);
            NSColor.FromRgb(0,128,0).SetFill();
            active.Fill();
        }

    }
}

然后在 Mac 上的 customSlider 渲染器中

using AppKit;
using CustomSliderColor.MacOS;
using Xamarin.Forms;
using myproject;
using myproject.MacOs;
using Xamarin.Forms.Platform.MacOS;

[assembly: ExportRenderer(typeof(CustomSlider), typeof(CustomSliderRenderer))]
namespace CustomSliderColor.MacOS
{
    public class CustomSliderRenderer : SliderRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
        {
            if (Control == null)
            {
                NSSlider customNSSlider = new NSSlider();
                CustomSliderCell custom = new CustomSliderCell();
                customNSSlider.Cell = custom;
                SetNativeControl(customNSSlider);
            }
            base.OnElementChanged(e);
        }
    }
}

然后你就有了!!!

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 2017-06-02
    • 2015-03-19
    • 1970-01-01
    • 2013-10-08
    • 2015-12-04
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多