Windows Phone自定义控件 ProgressRing

前言

Windows Phone为开发者提供了很多原生控件,但在很多场景下我们需要对默认的功能或样式做一定的修改才能满足我们的需求,自定义控件应运而生。本文通过以自定义控件进度环(ProgressRing)为例,向大家介绍Windows Phone中如何创建和使用自定义控件。

1、控件基类

通常自定义控件继承自Control、ItemsControl、ContentControl等。

Control:代表使用ControlTemplate来定义样式的UI控件的基类。

System.Object
  System.Windows.DependencyObject
    System.Windows.UIElement
      System.Windows.FrameworkElement
        System.Windows.Controls.Control

ItemsControl:代表一个可以用于表现一个集合对象的控件。

System.Object
  System.Windows.DependencyObject
    System.Windows.UIElement
      System.Windows.FrameworkElement
        System.Windows.Controls.Control
          System.Windows.Controls.ItemsControl

ContentControl:代表一个具有单独块级内容元素的控件。比如像Button,CheckBox,ScrollViewer都直接或间接的继承于它。

System.Object
  System.Windows.DependencyObject
    System.Windows.UIElement
      System.Windows.FrameworkElement
        System.Windows.Controls.Control
          System.Windows.Controls.ContentControl

2、创建自定义控件

下面我们就来创建一个继承自Control的用户控件ProgressRing的类。

namespace WindowsPhone.Controls
{
    public class ProgressRing : Control
    {
        public ProgressRing()
        {
            DefaultStyleKey = typeof(ProgressRing);
        }

        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
        }

        public bool IsActive
        {
            get { return (bool)GetValue(IsActiveProperty); }
            set { SetValue(IsActiveProperty, value); }
        }

        public static readonly DependencyProperty IsActiveProperty =
            DependencyProperty.Register("IsActive", typeof(bool), typeof(ProgressRing), new PropertyMetadata(false, new PropertyChangedCallback(IsActiveChanged)));

        private static void IsActiveChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
        {
            var pr = (ProgressRing)d;
            var isActive = (bool)args.NewValue;
        }
    }
}

通过DependencyProperty IsActiveProperty来代表进度环的状态,DependencyProperty和普通的属性的区别为,DependencyProperty属性可以为值表达式、数据绑定、动画和属性更改通知提供支持。举个例子,如果你声明了一个Style,你可以通过 <Setter Property="Background" Value="Red" /> 的形式来设置背景色,因为Background是DependencyProperty属性,但是你不能对一般的属性进行同样的操作,因为他们不是DependencyProperty属性。

DefaultStyleKey代表默认样式,若要为继承自 Control 的控件提供默认的 Style,请将 DefaultStyleKey 属性设置为相同类型的 TargetType 属性。 如果您没有设置 DefaultStyleKey,则将使用基类的默认样式。 例如,如果称为 NewButton 的控件继承自 Button,要使用新的默认 Style,请将 DefaultStyleKey 设置为类型 NewButton。 如果您没有设置 DefaultStyleKey,则会将 Style 用于 Button。

在一些复杂的场景中,比如你想要获取ControlTemplate中某个对象的实例,就有必要override OnApplyTemplate方法。这个方法在控件展示在屏幕前被调用,在这种场景下OnApplyTemplate比Loaded事件更适合来调整由template创建的visual tree,因为Loaded事件可能会在页面应用模板之前被调用,所以可能无法获取到ControlTemplate中的对象的实例,也就可能无法完成之前调整模板的功能。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索windows
, 控件
, 属性
, system
, controltemplate
, control
Controls
wpf progressring、windows phone、windowsphone、windows phone 10、windowsphone手机,以便于您获取更多的相关知识。

时间: 2024-08-25 18:14:24

Windows Phone自定义控件 ProgressRing的相关文章

windows phone8自定义控件

问题描述 windows phone8自定义控件 已经引用了,为什么还找不到类呢 解决方案 不用local直接用weipincommon看看

Windows Phone自定义控件

为了实现公司需求,不得不自己写自定义控件.首先第一个需求是密码掩码和明码显示的切 换.做的时候发现PasswordBox没有切换掩码和明码的属性或方法.那好咱只好自己动手实现,用一个TextBox和passwordBox来分别 实现掩码和明码的显示.直接上效果图吧. 明码显示 掩码显示 旧密码仍旧掩码显示,而新编辑的密码是明码显示 第二个控件是下拉刷新控件.下拉提示下拉可以刷新,下拉到一定程度提示松开可以刷新,松开手后显示正在刷新. 这样的控件网上还是有例子的,继承ListBox,使用自己的控件

Windows 8 常用第三方SDK使用概览

原文:Windows 8 常用第三方SDK使用概览 应用开发过程中,我们或多或少会使用到第三方的公司平台的功能,例如:新浪微博.人人网.高德地图等. 那么在Windows 8 Store App开发中,我们能够使用哪些第三方SDK呢?大家可以参考该网址:微软官方及第三方SDK. 我们可以在该网站上了解到有哪些微软官方的SDK和第三方的SDK,这里我主要介绍一下目前在Windows 8中可以使用的第三方SDK基本情况. 支付类 我们可以看到目前支付类SDK包括:中国移动应用内支付.新浪无线支付SD

VB.NET开发人员必备参考10本书目

参考     一.程序设计 1.<<Programming Microsoft Visual Basic .NET(Core Reference)>>(Visual Basic NET技术内幕) 本书内容深入全面,涵盖的主题十分丰富,并结合大量典型的代码示例来讲解Visual Basic.NET的核心编程技术.本书共分6大部分.首先介绍了Visual Basic.NET语言的基础知识,以及一些有关类的新特性,例如继承.委托和事件等.然后详细讲解了Visual Basic.NET面向

使用Windows Javascript库创建自定义控件

如果您已经用Javascript开发过windows store app程序,那么您肯定使用过Windows Javascript 库(WinJS).这个库提供了一组CSS样式.Javascript控件以及工具, 可以帮助您快速地创建符合UX准则的windows store app. 这里工具是一组函数,您可以使用这组函数来创建自定义控件. 您可以使用任何您喜欢的模式或者库来编写JavaScript控件,WinJS提供的库函数仅仅是您的选择之一.使用WinJS库创建自定义控件的一个最大的好处是该

背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing

原文:背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing [源码下载] 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing 作者:webabcd 介绍背水一战 Windows 10 之 控件(进度类) RangeBase Slider ProgressBar ProgressRing 示例1.R

重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider

原文:重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider [源码下载] 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之提示控件 ProgressRing - 进度圈控件 重新想象 Windows

创建Windows Phone 7自定义控件

写在最前     前段时间报名参加了WPMind发起的一个针对Windows Phone 7的开源项目"WPMind Windows Phone 7 Framework",最近抽空研究了一个实现比较简单的控件-Bubble Control.本人以前做Windows Mobile平台比较多,WP7平台上Silverlight是两个主流技术之一,因此也是现学现用,文章中有不对的地方还请大家指正.当然,不管难以与否,写这篇文章的目的就是为了和大家分享Windows Phone 7 控件的制作

WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现

原文:WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要有三种实现方式: 简单忙碌状态控件BusyBox: Win8/win10效果忙碌状态控件ProgressRing: 弹出异步等待框WaitingBox: 二.简单忙碌状态控件BusyBox 效果图:   通过属性"IsActive"