Windows Phone自訂控制項 ProgressRing

來源:互聯網
上載者:User

前言

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/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.