我在這裡介紹一種自定義控制項方式的正則驗證方法。業務背景不做詳細說明,這裡以技術背景為主。
思路:建立乙個控制項,使其具有文字框的特性外,還能就行正則驗證;
依據這個思路,來講解實現。
第一步:建立自定義控制項
因為要保留textbox所有特性,所以就繼承於textbox控制項即可
public class regextextbox : textbox
}
第二步:需要新增正則驗證的資訊
那就需要在類中新增2個依賴屬性:正規表示式(用於驗證輸入),錯誤訊息(當驗證不通過時顯示的錯誤內容,不是必須的)
public class regextextbox : textbox
第三步:使控制項能觸發驗證
觸發驗證的時機一般是:窗體載入後和內容改變後
「窗體載入後」不夠準確,因為正則驗證的表示式可能是從server傳過來,控制項初始化後,查詢並應用控制項模板,而wpf中對於輸入錯誤都採用了trigger來觸發顯示,例如:
接下來是測試專案內容:
1.主介面,就用使用者註冊來演示,要求:使用者名稱至少5個字元(不能有空格),年齡必須在0-150之間
注意regextextbox控制項,增加了regex和errormessage屬性。
……
……
2.viewmodel內容,使用了通知屬性
public class mainwindowviewmodel : notificationobject
set }}
private int _age;
/// /// _age
///
public int age
set }}
}
測試方式:
1.初始狀態:名字為空,驗證不通過,在名字文字框的提示內容中能顯示錯誤訊息
2.年齡輸入錯誤數字
3.年齡輸入其他字元
如果在驗證錯誤觸發器使用(validation.errors)[0].errorcontent時,當輸入正確時會在輸出視窗顯示內部錯誤system.windows.data error: 17 : cannot get 'item' value (type 'validationerror') from '(validation.errors)' (type 'readonlyobservablecollection`1'). bindingexpression:path=(0)[0].errorcontent; dataitem='regextextbox' (name=''); target element is 'regextextbox' (name=''); target property is 'tooltip' (type 'object') argumentoutofrangeexception:'system.argumentoutofrangeexception: 指定的引數已超出有效值的範圍。
但是可以使用(validation.errors).currentitem.errorcontent,就不能出現異常。
結束語:
有人問:花這麼大的精力寫乙個正則文字框有意義嗎?不是直接可以在xaml中使用正則驗證嗎?
回答:1.一般正則就是在文字框中,對隨意輸的內容進行驗證;
2.如果採用靜態xaml的話,需要的窗體初始化後給控制項的binding屬性新增驗證規則;
3.用xaml寫的正則驗證規則,比此複雜一點點。
當然,如果是開發乙個小軟體,就不需要這麼花精力寫自定義控制項;如果是乙個企業級專案,以後控制項一直要復用,並且可能還會增加很多特殊需求的話,還是建議使用自定義擴充套件控制項。
WPF自定義控制項(四) 自定義控制項
原文 wpf自定義控制項 四 自定義控制項 在實際工作中,wpf提供的控制項並不能完全滿足不同的設計需求。這時,需要我們設計自定義控制項。這裡lz總結一些自己的思路,特性如下 下面舉例說說在專案中我們經常用到調音台音量條,寫乙個自定義控制項模擬調音台音量條。自定義控制項singnallight,實現...
WPF控制項自定義事件
第一步 定義乙個委託,委託屬於乙個定義,是和類 介面類似的,通常放在外部 輕提示事件委託 public delegate void sendmessageeventhandle string text 第二步 定義乙個sendmessageeventhandle型別事件,事件屬於類的成員,所以要放在...
Wpf 自定義控制項 1
1.新建乙個wpf工程,在工程下面新建 乙個資料夾themes,在themes下新建兩個資源字典檔案generic.xaml和prettyseekbar.xaml generic.xaml resourcedictionary xmlns xmlns x resourcedictionary.mer...