UWP开发---DIY星级评分控件
一,需求来源
在开发韩剧TV UWP过程中,遇到了星级评分的控件问题,在安卓和html中很容易用现有的轮子实现星级评分,搜索了一下目前UWP还未有相关文章,在WPF的一篇文章中使用Photo shop+VS blend+ProgressBar使用自定义进度条的方式实现了自定义进度条,详情点击。这个方法可以联想到星级评分上,使用PS做出5颗星星,并且挖空中间,然后使用评分与ProgressBar绑定,这样实现精确的填充评分。另一种方法就是使用图标素材和集合控件使用小算法算出半星,全星,空星的数量,从而得到星级评分。
此文章,主要介绍后者的实现。
二,自定义控件
①初步设计
首先,我自己画了三种星星,分别命名为rank_star_full.png,rank_star_half.png,rank_star_blank.png。以满分为100分来计算,每颗星星20分,这样将Rank评分除以20就得到了一个double的星星数。小数部分超过小于0.5按半星计算,大于0.5按满星计算,剩下的空星使用5减去前面的满星和半星就可以得到。然后使用一个集合分别加入这些数量的对应图片,即可完成。
②图标素材
提供三张图片以供学习使用



③xmal
<GridView HorizontalAlignment="Left" SelectionMode="None" IsItemClickEnabled="False" Name="gridStars" ItemsSource="rankstars">
<GridView.ItemTemplate>
<DataTemplate>
<Border Width="20">
<Image Source="{Binding}"/>
</Border>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
使用自定义星级评分控件
<ctl:StarsRankGridView HorizontalAlignment="Left" VerticalAlignment="Center" Rank="{x:Bind serie.series.rank}"/>
④后台代码
//rank属性注册
public double Rank
{
get { return (double)GetValue(RankProperty); }
set { SetValue(RankProperty, value); }
}
public static readonly DependencyProperty RankProperty =DependencyProperty.Register (
"Rank",
typeof(double),
typeof(UserControl),
, new PropertyChangedCallback(Initial))
);
private static void Initial(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue!=null)
{
StarsRankGridView starsRankGridView = (StarsRankGridView)d;
starsRankGridView.starsList = starsRankGridView.AddImgsToList(starsRankGridView.starsList, ();
starsRankGridView.gridStars.ItemsSource = starsRankGridView.starsList;
}
}
public ObservableCollection<string> AddImgsToList(ObservableCollection<string> imgs ,double rank)
{
int full_StarsNums = (int)rank;
: ;
- full_StarsNums - half_StarsNums;
; i < full_StarsNums; i++)
{
starsList.Add("/Assets/Icons/rank_star_full.png");
}
; i < half_StarsNums; i++)
{
starsList.Add("/Assets/Icons/rank_star_half.png");
}
; i < balnk_StarNums; i++)
{
starsList.Add("/Assets/Icons/rank_star_blank.png");
}
return imgs;
}
完整代码
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
//https://go.microsoft.com/fwlink/?LinkId=234236 上介绍了“用户控件”项模板
namespace 韩剧TV.controls
{
public sealed partial class StarsRankGridView : UserControl
{
public double Rank
{
get { return (double)GetValue(RankProperty); }
set { SetValue(RankProperty, value); }
}
public ObservableCollection<string> starsList = new ObservableCollection<string>();
public StarsRankGridView()
{
this.InitializeComponent();
}
public static readonly DependencyProperty RankProperty = DependencyProperty.Register
(
"Rank",
typeof(double),
typeof(UserControl),
, new PropertyChangedCallback(Initial))
);
private static void Initial(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue!=null)
{
StarsRankGridView starsRankGridView = (StarsRankGridView)d;
starsRankGridView.starsList = starsRankGridView.AddImgsToList(starsRankGridView.starsList, ();
starsRankGridView.gridStars.ItemsSource = starsRankGridView.starsList;
}
}
public ObservableCollection<string> AddImgsToList(ObservableCollection<string> imgs ,double rank)
{
int full_StarsNums = (int)rank;
: ;
- full_StarsNums - half_StarsNums;
; i < full_StarsNums; i++)
{
starsList.Add("/Assets/Icons/rank_star_full.png");
}
; i < half_StarsNums; i++)
{
starsList.Add("/Assets/Icons/rank_star_half.png");
}
; i < balnk_StarNums; i++)
{
starsList.Add("/Assets/Icons/rank_star_blank.png");
}
return imgs;
}
}
}
完整代码
三,测试
UWP开发---DIY星级评分控件的更多相关文章
- Android 拖动条/滑动条控件、星级评分控件
ProgressBar有2个子控件: SeekBar 拖动条控件 RatingBar 星级评分控件 1.拖动条控件 <SeekBar android:layout_width=" ...
- Web用户控件开发--星型评分控件
本文中分享一个实现简单,使用方便的星型评分控件. 一:贴几张测试图片先: 二.星型评分控件的实现: RatingBar.ascx: <%@ Control Language="C#&q ...
- iOS- 非整星的评分控件(支持小数)
概述 订单评论里实现星级评分控件: 简单整星评价与非整星的精评价. 详细 代码下载:http://www.demodashi.com/demo/10711.html 现在很多应用都有评分功能. 有了订 ...
- Android星星评分控件RatingBar的使用
在Android的开发中,有一个叫做评分控件RatingBar,我们可以使用该控件做等级划分.评分等作用,星星形状显示,也可以半星级别,我们来看一下评分控件如何使用. 布局文件中定义控件以及属性,这里 ...
- iOS开发UI篇—UIScrollView控件实现图片缩放功能
iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...
- iOS开发UI篇—UIScrollView控件介绍
iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
- iOS开发UI篇—UITableview控件简单介绍
iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...
- iOS开发UI篇—UITableview控件基本使用
iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
随机推荐
- 【校招面试 之 C/C++】第17题 C 中的malloc相关
1.malloc (1)原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include ...
- 两数之和-数据结构设计 · Two Sum - Data structure design
[抄题]: 设计b并实现一个 TwoSum 类.他需要支持以下操作:add 和 find.add -把这个数添加到内部的数据结构.find -是否存在任意一对数字之和等于这个值 [思维问题]: 不知道 ...
- fusioncharts Y轴不显示中文的解决方法(转载)
使用fusionChart主要是被其界面吸引了,各类图表都很好看,下载以后文档也很周全,支持的语言也很多种 ,容易上手.fusionChart工作原理主要是通过后台传xml数据源给报表前台flash ...
- springmvc使用包装的pojo接收商品信息的查询条件
1.包装对象定义如下: 定义Items对象,并对其定义set和get方法. public class QueryVo { private Items items; public Items getIt ...
- Ubuntu 下如何查看已安装的软件
1.查看安装的所有软件 dpkg -l 例如:dpkg -l | grep ftp <span style="font-size:18px;">:~$ dpkg -l ...
- POJ1180 Batch Scheduling -斜率优化DP
题解 将费用提前计算可以得到状态转移方程: $F_i = \min(F_j + sumT_i * (sumC_i - sumC_j) + S \times (sumC_N - sumC_j)$ 把方程 ...
- 查询yum包安装路径
rpm -ql php71-php yum install json yum install libcurl
- 2017年UX设计流行的六大趋势
UX设计在接下来的2017年会有怎样的发展趋势呢?让我们一起回顾去年用户体验设计领域中的变化,来展望新一年用户体验设计的发展趋势吧. 1. 原型制作的爆炸性增长 随着用户体验设计师和用户界面设计师 ...
- 深入应用c++11 随书代码
代码并未在作者github上提供 将书中代码敲至vc 并调试运行 依赖BOOST库 编译环境vs2015 boost1.59 // Client.cpp : 定义控制台应用程序的入口点. // #in ...
- 浅谈OCR之Tesseract
光 学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程.OCR技术非常专业,一般多是印刷.打印 ...
