WPF 自定义进度条

之前写过一篇文章[WPF 重写按钮变成音乐播放器按钮]
(http://blog.csdn.net/lishuangquan1987/article/details/52097803),
其实这一篇是接着那一篇写的,这一篇重点介绍音乐播放器的滑动进度条。
本文示例下载地址
首先看看我做的效果:
这里写图片描述
具体原理就是用一个Canvas里放一个border和一个Rectangle,设置成不同颜色,滑动条使用的是Thumb.
使用其他的拖动效果没有使用thumb好,而且thumb拖动处理起来很方便。所以以后遇到再WPF中有控件需要跟随鼠标拖动改变位置就考虑用thumb吧。
代码如下:

<UserControl x:Class="WPF_Player.UCProcessBar"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             xmlns:local="clr-namespace:WPF_Player"
             d:DesignHeight="20" d:DesignWidth="205">
    <UserControl.Resources>
        <local:ValueConverter x:Key="converter"></local:ValueConverter>
    </UserControl.Resources>
    <Grid >

        <Canvas>

            <Border Height="14" Canvas.Top="4" Width="202" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Background="Gray" Opacity="0.4">

            </Border>
            <Rectangle Height="10" Canvas.Left="1" Canvas.Top="5" Width="{Binding RealValue, Mode=TwoWay}" Fill="Green" Margin="1"></Rectangle>
            <Thumb DragCompleted="Thumb_DragCompleted" DragDelta="Thumb_DragDelta"   Height="20" Panel.ZIndex="5" Width="5"  Canvas.Left="{Binding RealValue, Converter={StaticResource converter}, ConverterParameter=Button, Mode=TwoWay}" Cursor="Hand"></Thumb>
        </Canvas>
    </Grid>
</UserControl>

后台处理的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Windows.Controls.Primitives;

namespace WPF_Player
{
    /// <summary>
    /// Interaction logic for UCProcessBar.xaml
    /// </summary>
    public partial class UCProcessBar : UserControl,INotifyPropertyChanged
    {
        public UCProcessBar()
        {
            InitializeComponent();
            this.DataContext = this;
        }
        private double minValue = 0;

        public double MinValue
        {
            get { return minValue; }
            set { minValue = value; }
        }
        private double maxValue = 100;

        public double MaxValue
        {
            get { return maxValue; }
            set { maxValue = value; }
        }
        private double currentValue = 0;

        public double CurrentValue
        {
            get { return currentValue; }
            set { currentValue = value; RealValue = 200 / (MaxValue - minValue) * value; }
        }

        private double realValue;//经过转换后的值

        public double RealValue
        {
            get { return realValue; }
            set { realValue = value; OnPropertyChanged("RealValue"); }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string name)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
        public event Action<double> PlayProcessChanged;
        private bool canMove = false;
        private double x = 0;

        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            Thumb t = sender as Thumb;

            Canvas.SetLeft(t, Canvas.GetLeft(t) + e.HorizontalChange);
            Canvas.SetTop(t, Canvas.GetTop(t) + e.VerticalChange);
        }

        private void Thumb_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        {
            if (PlayProcessChanged != null)
            {
                PlayProcessChanged(RealValue * (MaxValue - MinValue) / 200);
            }
        }
    }
    public class ValueConverter:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double v = (double)value;
            string para = parameter.ToString();
            switch (para)
            {
                case "Button": return v + 1;
                case "Rectangle": return v;
                default: return v;                   
            }

        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double v = (double)value;
            switch (parameter.ToString())
            {
                case "Button": return v - 1;

                default: return v;

            }
        }
    }
}

要注意的地方
TimeSpan转换为时分秒的格式是:与DateTime有区别

TimeSpan t=TimeSpan.FromSeconds(100);
string str=t.tostring("mm\\:ss");
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WPF环形虚线进度条是一种以圆形形式展示进度的控件。在WPF中,可以使用Ellipse(椭圆)和Path(路径)来创建环形虚线效果。 首先,我们可以在XAML中添加一个Ellipse元素作为背景圆形,并设置其宽度、高度、填充颜色等属性来定义进度条的样式。 接着,我们可以使用Path元素来创建环形虚线效果。虚线的形状可以通过设置路径数据来定义。例如,可以使用LineSegment(线段)和ArcSegment(弧段)来绘制虚线的路径。 然后,使用DoubleAnimation进行动画效果的实现。可以通过设置动画的起始值和结束值来控制进度条动态变化。通过设置动画的插值函数,可以使进度条以流畅的方式过渡。 最后,在代码中可以根据实际需要来更新进度条的值,从而实现进度的动态显示。可以通过通过绑定ProgressBar或者自定义一个依赖属性来实现。 总之,WPF环形虚线进度条可以通过控制Ellipse和Path元素的样式、动画以及数值来实现。这种形式的进度条可以提供更加直观的用户体验,让用户清晰地了解任务的进展情况。 ### 回答2: WPF环形虚线进度条是一种用于展示进度的界面元素,其外观呈现环形,并且线条是虚线的效果。以下是实现该效果的方法: 首先,我们需要使用WPF的布局容器来创建一个环形的背景,并将其设置为透明。可以使用Canvas或Grid等容器来实现此目的。 其次,在环形背景上,我们可以使用Path元素来绘制虚线。Path元素可以使用Geometry绘制各种形状,包括虚线。我们可以使用LineGeometry来绘制一条直线,并设置其Stroke属性为虚线样式。 然后,我们可以使用Storyboard动画来控制虚线的显示进度。可以使用DoubleAnimation来控制虚线的起始和结束点,从而实现进度的动画效果。可以根据实际需求调整动画的速度、重复次数等属性。 最后,我们可以根据进度条的值来控制动画的触发。可以使用数据绑定将进度条的值绑定到动画的开始和结束点上,从而实现进度条随数据变化而更新动画进度。 总结来说,实现WPF环形虚线进度条需要使用布局容器、Path元素、动画和数据绑定等技术。通过合理设置这些组件的属性和关联关系,我们可以实现一个漂亮而实用的环形虚线进度条。 ### 回答3: WPF环形虚线进度条是一种在WPF应用程序中展示进度的视觉元素。它通常用于表示某个操作的完成程度或加载进度。环形虚线进度条具有以下特点: 1. 外观:环形虚线进度条呈现为一个圆环,通过一系列由虚线组成的元素来表示进度。它的背景可以是透明的或者设置为特定的颜色。 2. 进度显示:进度条上的虚线根据当前的操作进度进行显示。随着操作进展,虚线的数量和位置会发生变化,以反映出当前的进度。 3. 自定义WPF环形虚线进度条可以通过样式和模板来进行自定义。可以调整虚线的样式、颜色、厚度等属性,以满足不同的设计需求。 4. 动画效果:在操作进行过程中,环形虚线进度条通常会配合动画效果,如旋转或者渐变变化。这样可以增加进度条的交互性和视觉吸引力。 使用WPF环形虚线进度条可以使用户更直观地了解操作的进度,提高用户体验。它适用于各种需要展示进度的应用场景,如文件上传、下载、数据处理等。通过合理设计,并结合其他视觉元素,可以使环形虚线进度条更加美观和有效地传达进度信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值