在 Xamarin.Forms 中自定义进度栏外观

2023-11-27

I used Drawable自定义渲染ProgressBar in Android正如对这个问题但该解决方案不适用于 iOS。

Below is how it renders in Android. enter image description here

Below is how it renders in iOS enter image description here

下面是我的代码iOS CustomRenderer

[assembly: ExportRenderer(typeof(CustomProgressbar), typeof(CustomProgressBarRenderer))]
namespace Demo.iOS.Renderers
{
public class CustomProgressBarRenderer : ProgressBarRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<ProgressBar> e)
    {
        try
        {
            base.OnElementChanged(e);

            if (Control != null)
            {                
               Control.ProgressTintColor = Color.FromHex("#ff0000").ToUIColor();                       
               Control.TrackTintColor = Color.FromHex("#3489cc").ToUIColor();
             } 
        }
        catch (Exception ex)
        {

        }
    }

    public override void LayoutSubviews()
    {
        base.LayoutSubviews();
        var X = 1.0f;
        var Y = 15.0f;
        CGAffineTransform _transform = CGAffineTransform.MakeScale(X, Y);
        this.Transform = _transform;
        this.ClipsToBounds = true;
        this.Layer.MasksToBounds = true;
        this.Layer.CornerRadius = 5;
    }
}

}

我该如何实现这个目标?


根据@SushiHangover的回答,我们可以做一个ViewRenderer来达到你的效果。

首先,创建我们自己的ProgressView,确保它继承自ContentView。还添加一个BindableProperty呈现价值:

public partial class ProgressView : ContentView
{
    public double Progress
    {
        set { SetValue(ProgressProperty, value); }
        get { return (double)GetValue(ProgressProperty); }
    }

    public readonly static BindableProperty ProgressProperty = BindableProperty.Create("Progress", typeof(double), typeof(ProgressView), 0.0);

    ...
}

然后,我们可以制作自定义渲染器,如下所示:

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

    //You can refer to @SushiHangover's method for detail's code, here I use the same name.
    Setup();
    Complete = ((ProgressView)Element).Progress;
}

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

    if (e.PropertyName == "Progress")
    {
        Complete = ((ProgressView)Element).Progress;
    }
}

因为这是在渲染器中,所以我们应该刷新标签的框架:

public override void Draw(CGRect rect)
{
    base.Draw(rect);
    ...
    label.Frame = Bounds;
}

最后我们可以在表单上使用它,例如:

<local:ProgressView x:Name="MyProgress" HeightRequest="50"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Xamarin.Forms 中自定义进度栏外观 的相关文章

随机推荐

  • 在 PyQt 中(很好地)显示代数表达式 [重复]

    这个问题在这里已经有答案了 在我的 python 程序中 有一个我创建的数学对象的层次结构 它们代表数学公式 例如 有Collection 这是一系列Equations 这是一个包含两个的容器Sums Products Quotients
  • 设置autoDeploy和deployOnStartup会导致应用程序在启动时部署两次?

    我正在阅读 Damonar Chetty 撰写的 Tomcat 6 开发人员指南 他在主机章节中说道 将两者设置为 true 将导致应用程序在启动时部署 然后在 Tomcat 启动并运行后再次部署 因此 请确保至少将其中一项设置为 fals
  • 在 foreach 循环内部或外部声明变量:哪个更快/更好?

    其中哪一个更快 更好 这个 List
  • 在 Java 中使用 BouncyCastle 通过 ECIES 进行加密

    我正在尝试使用 Java 中的 BouncyCastle 使用 ECC 算法加密一些内容 但我收到 BouncyCastle 库的异常 说无法投射JCEECPublicKey to IESKey 据我了解 生成的公钥KeyPairGener
  • mvc4 项目中的 Intellisense 无法在 vs 2012 professional 中工作?

    在我的剃刀视图中 智能感知不起作用 有解决这个问题的方法吗 我正在使用新发布的 VS 2012 Professional 并构建一个 ASP NET MVC 4 项目 我的剃刀视图中的智能感知不起作用 有什么解决办法吗 对我有帮助的是删除
  • Android - 如何动态更改片段布局

    我有一个平板电脑应用程序 其中包含一个显示我公司数据的 about 片段 我想在页面上时根据屏幕方向动态更改布局 但我还没有找到方法 如果有人找到解决方案 请提前致谢 Yume177 我找到了怎么做 Override public void
  • Git 子模块在 TFS Build 上失败

    当我尝试使用 TFS 和 Git 进行构建时 存在一个限制 即 TFS 的 git 提供程序尚不支持子模块 有点痛苦 但到底是什么 我可以告诉 TFS 在编译之前运行批处理文件 我用它来调用手动 git 脚本来更新我的 超级 项目中的所有子
  • 从 GitHub 操作推送到源

    我正在努力推动origin远程 GitHub 操作 我的行动逻辑是 handle pull request review事件并按评论消息过滤 签出到 master 合并 PR 分支 运行一些检查并将其推送到origin 脚本是 if GIT
  • Phoenix 框架中的动态模型

    有没有办法在Phoenix中动态创建和使用模型 我有一个存储有关客户表的元数据的应用程序 它们设置了一些字段 列名称和类型 然后向我发送 CSV 文件以进行解析和存储 我想根据存储的元数据生成一个模型 以便我可以使用 Ecto 来管理客户端
  • PyUSB 后端无法访问

    嘿 我正在尝试运行教程中提供的简单脚本 USB 正在导入 但是当我尝试搜索设备时出现以下错误 请帮助 gt gt gt dev usb core find Traceback most recent call last File
  • Java套接字的PrintWriter线程安全吗?

    所以 我有两个线程 线程一管理客户端连接 只有一台客户端和一台服务器 我将其称为我的服务器线程 线程二管理向客户端发送消息 我将其称为我的消息处理器线程 线程一负责定期向客户端发送心跳 在编程时 我假设套接字不是线程安全的 但缓冲区是 只要
  • 梯度方向计算

    我正在计算机视觉课程中完成我的任务 子任务之一是基于图像亮度的梯度方向计算 我制作了一个明亮 宽度 高度 矩阵 其中包含图像每个像素的亮度值 我有两个这样的功能 double Image grad x int x int y if x wi
  • 在 C# 中使用动态创建的控件

    我正在创建一个应用程序 用户将在其中输入成绩 程序将输出加权平均值 加载时 它将询问作业的类别数量 然后程序将动态创建文本框供用户输入信息 问题是我无法弄清楚如何读取创建文本框后输入的文本 这是我的代码 TextBox txtbx new
  • 泛型类型推断失败?

    实施例A 研究以下片段 public class ExampleA static class Pair
  • android gridview中的分页[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 android gridview 可以分页吗 如果可用 您可以提供任何链接吗 对于水平分页 请在 ViewPager 中使用 GridView 这是一个教程
  • python Socket服务器与真实IP地址

    我正在使用我的 python 服务器 但我已经不再使用 localhost 我想通过互联网进行访问 到目前为止我的代码是 import socket import threading import socketserver class Th
  • Maven 可以生成 exe 文件和 mac os x 应用程序吗?

    假设您创建了一个小型 Java 桌面应用程序 其中包含一个 jar 和一些依赖项 可能还有一个许可证文本文件 我知道有很多 Ant 任务可以生成安装程序 可执行文件和正确的 Mac OS X 应用程序 包括将它们打包为 dmg 文件 例子是
  • 将静态 constexpr 类成员分配给运行时变量

    我知道有很多类似的问题 但又有些不同的问题 这是关于以下情况 include
  • 如何在 Linux 中轻松接收邮件并将其提供给 Rails?

    我整晚都在谷歌上搜索 postfix howto 但仍然不明白我如何在 linux 服务器上接收电子邮件 更具体地说 Ubuntu 我所需要的只是一个包罗万象的邮箱 它可以获取所有电子邮件并将它们提供给 ruby 脚本 当然 然后将其传递给
  • 在 Xamarin.Forms 中自定义进度栏外观

    I used Drawable自定义渲染ProgressBar in Android正如对这个问题但该解决方案不适用于 iOS Below is how it renders in Android Below is how it rende