本文将告诉大家,如何做一个带文字的进度条,这个进度条可以用在游戏,现在我做的挂机游戏就使用了他。
如何做上图的效果,实际需要的是两个控件,一个是显示文字 的 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# F# 的 MailboxProcessor 和 C# 的 Actor 模型
网站制作网站,深圳做网站哪家比较好?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
外贸公司网站制作哪家好,maersk船公司官网?
如何选择CMS系统实现快速建站与SEO优化?
网站制作需要会哪些技术,建立一个网站要花费多少?
制作企业网站建设方案,怎样建设一个公司网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何用PHP工具快速搭建高效网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何配置WinSCP新建站点的密钥验证步骤?
小型网站建站如何选择虚拟主机?
如何解决ASP生成WAP建站中文乱码问题?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
非常酷的网站设计制作软件,酷培ai教育官方网站?
移民网站制作流程,怎么看加拿大移民官网?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
c# 在高并发场景下,委托和接口调用的性能对比
建站之星收费标准详解:套餐费用及年费价格表一览
定制建站价位费用解析与套餐推荐全攻略
昆明网站制作哪家好,昆明公租房申请网上登录入口?
广东企业建站网站优化与SEO营销核心策略指南
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何零基础在云服务器搭建WordPress站点?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何在腾讯云服务器上快速搭建个人网站?
如何快速生成可下载的建站源码工具?
成都网站制作报价公司,成都工业用气开户费用?
装修招标网站设计制作流程,装修招标流程?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
,怎么在广州志愿者网站注册?
建站主机如何选?高性价比方案全解析
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
如何用景安虚拟主机手机版绑定域名建站?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
建站之家VIP精选网站模板与SEO优化教程整合指南
香港服务器部署网站为何提示未备案?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
常州自助建站工具推荐:低成本搭建与模板选择技巧
家具网站制作软件,家具厂怎么跑业务?
PHP正则匹配日期和时间(时间戳转换)的实例代码
潮流网站制作头像软件下载,适合母子的网名有哪些?
建站之星如何实现网站加密操作?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
*请认真填写需求信息,我们会在24小时内与您取得联系。