wpf自定義控件之依賴屬性


 

在wpf開發過程中,總會用到格式各樣的控件,但是原生控件遠遠不能滿足實際開發的需要,這時候wpf強大之處就能體現出來了。根據實際需求自定義各種不同的控件滿足不同的業務需求。

首先說需求吧:

一:根據某個綁定的int值,控制一個圓形控件顯示或者不顯示某種顏色。

分析:

一:需求就一句話,但是根據這一句話,就能得到一些必要的信息。

  1.控件綁定的值是個int型。

  2.圓形控件。

  3.根據傳進來的int值做邏輯處理。

分析完需求之后就要開始思考怎么實現了,仔細想想,其實wpf中的Ellipse控件可以畫出帶顏色的圓形,問題就在於如何根據綁定的值顯示某種顏色。

如果對代碼要求不高,沒什么復用性要求的話,可以直接寫在xaml對應的.cs文件中,按照bool值來給控件賦值顏色,但是如果對這個圓形復用性很高,或者代碼分離,不允許在.cs文件中寫代碼,那就只能想其他辦法了。

啰嗦到現在,實現這個控件有三個方式:1.寫在xaml對應的.cs中。2.寫一個convert類來轉換。3.自定義一個圓形控件。

本文着重說一下自定義圓形控件,另外兩種方式不贅述。

實現:

一.新建wpf引用程序,名為LedTest,新建一個名為LED的用戶控件,用來寫自定義的控件,項目結構為下圖:

二.在用戶控件中的界面上先畫好帶顏色的圓形:

三.重頭戲來了,接下來就是依賴屬性了。

首先,什么是依賴屬性?為什么要用依賴屬性?

完整的依賴屬性解釋百度上有,我就說一下我的理解:依賴屬性是wpf提供的一種為豐富控件屬性,使依賴屬性可以依賴於控件綁定的值,並可以對這些值進行一些邏輯處理的東西。

了解了什么是依賴屬性后就知道了為什么要用依賴屬性,因為依賴屬性能夠拓展控件的屬性,譬如給button增加一個新的屬性,使button綁定值的時候能達到某種效果。

廢話不說了,直接上代碼:

 

 

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;

namespace LedTest
{
/// <summary>
/// LED.xaml 的交互邏輯
/// </summary>
public partial class LED : UserControl
{
/// <summary>
/// 構造函數
/// </summary>
public LED()
{
InitializeComponent();
}
/// <summary>
/// 定義屬性
/// </summary>
public int Colors
{
get { return (int)GetValue(ColorsProperty); }
set { SetValue(ColorsProperty, value); }
}

// Using a DependencyProperty as the backing store for Colors. This enables animation, styling, binding, etc...
/// <summary>
/// 依賴屬性注冊
/// 參數1:Colors,標定了控件中的屬性名
/// 參數2:typeof(int),確定了參數1的值類型
/// 參數3:typeof(LED),指定了參數作用的域/界面
/// 參數4:new UIPropertyMetadata(1, ChangeColor),1是指定了參數1的默認值(默認值的設定根據需要自己確定),
/// ChangeColor為回調函數,根據界面綁定的值執行某些邏輯處理
/// </summary>
public static readonly DependencyProperty ColorsProperty =
DependencyProperty.Register("Colors", typeof(int), typeof(LED), new UIPropertyMetadata(1, ChangeColor));

/// <summary>
/// 回調函數,根據綁定的值做邏輯處理
/// </summary>
/// <param name="obj"></param>
/// <param name="r"></param>
private static void ChangeColor(DependencyObject obj, DependencyPropertyChangedEventArgs r)
{
LED led = (LED)obj;
Ellipse ellipse = led.LedControl;
if (r.NewValue.Equals(0))
{
ellipse.Fill = new SolidColorBrush(System.Windows.Media.Colors.Gray);
}
}


}
}

至此,這個圓形的控件就算封裝好了,接下來就算在界面上使用了。

四.主界面使用自定義的控件

控件封裝好,用就簡單了,下面就是用法。

 

 五.到這里呢,自定義控件、依賴屬性注冊就結束了。本例子非常非常的基礎,僅僅適合不了解wpf自定義控件的伙伴屬性代碼用。需用自取,無用不噴。謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM