全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

android 中win10 使用uwp控件实现进度条Marquez效果

本文将告诉大家,如何做一个带文字的进度条,这个进度条可以用在游戏,现在我做的挂机游戏就使用了他。

如何做上图的效果,实际需要的是两个控件,一个是显示文字 的 TextBlock 一个是进度条。

那么如何让 文字和左边的距离变化?使用 TranslateTransform

看起来 Marquez 的界面就是:     

 <ProgressBar x:Name="Mcdon" Maximum="100" Minimum="0" Value="20"
   VerticalAlignment="Stretch"></ProgressBar>
 <TextBlock x:Name="scrohn" Text="100/100"
   VerticalAlignment="Center">
  <TextBlock.RenderTransform>
  <TranslateTransform X="0"></TranslateTransform>
  </TextBlock.RenderTransform>
 </TextBlock>

进度条的名字就是 Marquez ,写完界面,后台也不难

需要使用几个依赖属性设置最大值、当前值、最小值   

 /// <summary>
 /// 标识 <see cref="Maximum" /> 的依赖项属性。
 /// </summary>
 public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(
  "Maximum", typeof(double), typeof(Marquez), new PropertyMetadata(100d, (s, e) =>
  {
  var t = s as Marquez;
  if (t == null)
  {
   return;
  }
  Scrhrentran(t.scrohn, t.ActualWidth, t.Value, (double) e.NewValue, t.Mcdon);
  }));
 /// <summary>
 /// 标识 <see cref="Minimum" /> 的依赖项属性。
 /// </summary>
 public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
  "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double)));
 /// <summary>
 /// 标识 <see cref="Value" /> 的依赖项属性。
 /// </summary>
 public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
  "Value", typeof(double), typeof(Marquez), new PropertyMetadata(20d, (s, e) =>
  {
  var t = s as Marquez;
  if (t == null)
  {
   return;
  }
  Scrhrentran(t.scrohn, t.ActualWidth, (double) e.NewValue, t.Maximum, t.Mcdon);
  }));
 /// <summary>
 /// 获取或设置
 /// </summary>
 public double Value
 {
  get { return (double) GetValue(ValueProperty); }
  set { SetValue(ValueProperty, value); }
 }
 /// <summary>
 /// 获取或设置最小值
 /// </summary>
 public double Minimum
 {
  get { return (double) GetValue(MinimumProperty); }
  set { SetValue(MinimumProperty, value); }
 }
 /// <summary>
 /// 获取或设置最大值
 /// </summary>
 public double Maximum
 {
  get { return (double) GetValue(MaximumProperty); }
  set { SetValue(MaximumProperty, value); }
 }

所有值变化时,需要修改文字和进度条,因为进度条没有绑定值到代码,Scrhrentran 函数修改所有值。

为什么不使用绑定,因为绑定容易重复,而且有些值不是简单绑定就可以,这个控件使用绑定还是可以做到,如果自己感兴趣,可以修改他绑定。

从属性可以看到,值变化自动调用 Scrhrentran 于是函数需要修改进度条的值,修改进度条很简单,只需要使用下面代码        

 private static void Scrhrentran(TextBlock scrohn, double w, double v, double t, ProgressBar mcdon)
  {
   mcdon.Value = v;
   mcdon.Maximum = t;
  }

可以看到,上面的代码没修改最小值,因为最小值没有在依赖属性写,我不写最小值因为我想讲下如何获得依赖属性修改。

依赖属性是很好用的,他自己就带了绑定,如果想用绑定,那么可以使用依赖属性,依赖属性可以使用 dep 和tab打出来,一般的依赖属性是比较长的,最小值用的就是 vs 自带的依赖属性,也就是经常这样写。      

/// <summary>
 /// 标识 Minimum 的依赖项属性。
 /// </summary>
 public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
  "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double)));
  /// <summary>
 /// 获取或设置最小值
 /// </summary>
 public double Minimum
 {
  get { return (double) GetValue(MinimumProperty); }
  set { SetValue(MinimumProperty, value); }
 }

实际依赖属性是上面的静态属性,他使用了注册,注册的第一个参数表示变量的名字,因为是自己生成的,就是字符串,但是字符串有问题,如果我修改了 Minimum 名称,那么字符串就无法使用,为了在修改名称可以使用,我建议使用 nameof 这个可以获得变量名称。

其中第二个参数是 类型,第三个是类,这个参数指定是哪个类,如果复制了别人的 依赖属性,容易出错,因为他的类没有修改为自己的类。最后一个属性是指定默认值,在这个属性可以指定属性修改时的函数。        

 public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
  "Minimum", typeof(double), typeof(Marquez), new PropertyMetadata(default(double), (s, e) =>
  {
  } ));

现在就可以在里面写属性修改的函数,第一个参数 s 是哪个触发,也就是 Marquez ,使用第一个参数就可以获得 Marquez,第二个参数是获得之前的值和当前的值,通过e.NewValue可以获得修改后的值。

但是不可以通过这个函数修改 e.NewValue 的值。

于是这个控件比较难的地方就是修改文字,下面来开始做这部分。

显示文字可以使用下面代码           

 scrohn.Text = v.ToString("F") + "/" + t.ToString("F");

可以看到,只看代码是不知道 v 是什么, t 是什么,所以在命名时最好不要这样写,建议写为 value 和 maximum,这样看代码就可以知道两个值。

修改文字之前,判断RenderTransform            

 var sc = scrohn.RenderTransform as TranslateTransform;

在value为最大值,文字显示在中间,于是文字最大的就是 w / 2 ,w就是控件宽度。但是还需要乘以现在的 v / t

于是算法就是 sc.X = w / 2 * v / t ,但是因为文字有宽度,显示的是文字左边,所以需要减去文字,但是可能让文字在控件看不到,因为sc.X < 0,于是代码就是          

 sc.X = w / 2 * v / t - scrohn.ActualWidth / 2;
  if (sc.X < 0)
  {
   sc.X = 0;
  }

总的代码放在github:https://github.com/lindexi/UWP/tree/master/uwp/control/Progress

以上所述是小编给大家介绍的android 中win10 使用uwp控件实现进度条Marquez效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# win10  # uwp  # 进度条  # Android自定义双向进度条的实现代码  # Android编程自定义进度条颜色的方法详解  # Android 自定义view实现进度条加载效果实例代码  # Android自定义View仿华为圆形加载进度条  # Android进度条控件progressbar使用方法详解  # Android实现文件解压带进度条功能  # Android实现蜗牛进度条效果  # Android自定义圆形进度条  # Android自定义View实现环形进度条的思路与实例  # android自定义进度条渐变色View的实例代码  # Android编程实现对话框形式进度条功能示例  # 绑定  # 最小值  # 可以使用  # 第一个  # 就可以  # 可以看到  # 的是  # 第二个  # 可以获得  # 小编  # 自己的  # 我想  # 几个  # 放在  # 在这个  # 在此  # 不可以  # 感兴趣  # 这部 


相关文章: 电商平台网站制作流程,电商网站如何制作?  如何做网站制作流程,*游戏网站怎么搭建?  如何登录建站主机?访问步骤全解析    c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  制作网站的模板软件,网站怎么建设?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何快速搭建FTP站点实现文件共享?  临沂网站制作企业,临沂第三中学官方网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何在IIS服务器上快速部署高效网站?  如何确认建站备案号应放置的具体位置?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  建站上市公司网站建设方案与SEO优化服务定制指南  网站制作公司排行榜,抖音怎样做个人官方网站  建站之星CMS建站配置指南:模板选择与SEO优化技巧  建站主机助手选型指南:2025年热门推荐与高效部署技巧  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  python的本地网站制作,如何创建本地站点?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何在新浪SAE免费搭建个人博客?  Android自定义控件实现温度旋转按钮效果  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  简单实现Android验证码  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何基于云服务器快速搭建个人网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  香港服务器WordPress建站指南:SEO优化与高效部署策略  建站主机与服务器功能差异如何区分?  ,柠檬视频怎样兑换vip?  智能起名网站制作软件有哪些,制作logo的软件?  如何在建站之星绑定自定义域名?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何快速选择适合个人网站的云服务器配置?  javascript中对象的定义、使用以及对象和原型链操作小结  网站制作难吗安全吗,做一个网站需要多久时间?  高防服务器租用如何选择配置与防御等级?  微课制作网站有哪些,微课网怎么进?  建站之星安装路径如何正确选择及配置?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何制作一个表白网站视频,关于勇敢表白的小标题?  制作公司内部网站有哪些,内网如何建网站?  如何通过FTP服务器快速搭建网站?  Thinkphp 中 distinct 的用法解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。