




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.1 DependencyProperty說明1.只有繼承System.Workflow.ComponentModel.DependencyObject的類才能應用定義DependencyProperty2.要定義DependencyProperty,要使用System.Workflow.ComponentModel.DependencyProperty的靜態方式注冊屬性3.DependencyProperty 的綁定說明l Activity的DependencyProperty可以綁定到容器(工作流)的屬性l Activity的DependencyProperty可以綁定到容器(工作流)內其
2、他Activity的屬性l 容器(工作流)可以定義DependencyProperty,但只有在繼承了該容器的情況下,才能在設計器中看到該屬性l Activity可以定義DependencyProperty,但只有在繼承了該Activity或將該Activity添加到容器中的情況下,才能在設計器中看到該屬性2 DependencyProperty從屬屬性1. 從屬屬性要定義為靜態.為了在外部可以綁定,最好定義為Public2. 從屬屬性實際上是取代了正常屬性的存值變量3. 如果從屬屬性所對應的正常屬性是實例成員,操作屬性值時的表現形式為實例成員4. 只有繼承System.Workflow.Co
3、mponentModel.DependencyObject的類才能應用定義DependencyProperty5. 要使用System.Workflow.ComponentModel.DependencyProperty的靜態方法注冊屬性6. 注冊從屬屬性的類中必須存在名為注冊名Property的靜態 DependencyProperty變量7. 定義從屬屬性不畢然要定義一個與之對應的屬性,注冊從屬屬性也可以在當前類外部進行(具體見:從屬屬性的外部注冊)2.1 Register向類注冊從屬屬性System.Workflow.ComponentModel.DependencyProperty類的
4、靜態方法Creates new instances of the DependencyProperty possessing specific initialization conditions. 重載1public static DependencyProperty Register(string name, Type propertyType, Type ownerType);參數1:注冊的從屬屬性的名子,該值賦給Name屬性參數2:屬屬性的數據類型,該值賦給PropertyType屬性參數3:再將從屬性性注冊到的類,該值賦給OwnerType屬性重載2public static Depe
5、ndencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata);參數1:注冊的從屬屬性的名子,該值賦給Name屬性參數2:屬屬性的數據類型,該值賦給PropertyType屬性參數3:再將將從屬性性注冊到的類,該值賦給OwnerType屬性參數4:從屬屬性的默認值,該值賦給DefaultMetadata屬性public Activity1: SequenceActivity /從屬屬性Apublic static DependencyPropert
6、y BProperty = DependencyProperty.Register("B", typeof(string), typeof(Activity1);public string Bget return (string)(base.GetValue(Activity1.BProperty);set base.SetValue(Activity1.BProperty, value); /從屬屬性Bpublic static DependencyProperty AProperty = DependencyProperty.Register("A"
7、, typeof(string), typeof(Activity1),new PropertyMetadata("love");public string Agetreturn (string)(base.GetValue(Activity1.AProperty);setbase.SetValue(Activity1.AProperty, value);說明:對應的屬性名,與注冊的從屬屬性名,可以不一樣,但最好一樣靜態的從屬屬性與注冊的從屬屬性名的格式必須是: 名Property 與 名 的格式,如:BProperty = DependencyProperty.Regis
8、ter("B",AProperty = DependencyProperty.Register("A"如果要對屬性賦初始值,不要在構造函數中操作,最好在 protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)操作2.2 RegisterAttachedSystem.Workflow.ComponentModel.DependencyProperty類的靜態方法Initializes a new instance of the
9、 DependencyProperty class that has the properties parameterized according to the input parameters. 重載1public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType);參數1:參數2:參數3:重載2public static DependencyProperty RegisterAttached(string name, Type propertyType, Typ
10、e ownerType, PropertyMetadata defaultMetadata);參數1:參數2:參數3:參數4:重載3public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, Type validatorType);參數1:參數2:參數3:參數4:參數5:2.3 得到從屬屬性的基本信息System.Workflow.ComponentModel.DependencyProper
11、ty類的實例屬性類.從屬屬性.DefaultMetadata 得到從屬性性的默認值類.從屬屬性.Name 得到從屬屬性的名子類.從屬屬性.OwnerType 得到該從屬屬性所屬的類類.從屬屬性.PropertyType 得到從屬屬性的數據類型類.從屬屬性.ValidatorType Gets the Type implementing validation logic specific to the DependencyProperty.類.從屬屬性.IsAttached Gets the property that indicates whether this DependencyPrope
12、rty is associated to a DependencyObject by registration.類.從屬屬性.IsEvent Gets the property that indicates whether the DependencyProperty is an event Delegate.例System.Console.WriteLine(Activity1.AProperty.DefaultMetadata.DefaultValue);System.Console.WriteLine(Activity1.AProperty.IsAttached);System.Cons
13、ole.WriteLine(Activity1.AProperty.IsEvent);System.Console.WriteLine(Activity1.AProperty.Name);System.Console.WriteLine(Activity1.AProperty.OwnerType);System.Console.WriteLine(Activity1.AProperty.PropertyType);System.Console.WriteLine(Activity1.AProperty.ValidatorType);2.4 FromName 從指定類中返回指定名稱的從屬屬性Sy
14、stem.Workflow.ComponentModel.DependencyProperty類的靜態方法 public static DependencyProperty FromName(string propertyName, Type ownerType);返回值:從屬屬性對象參數1:從屬屬性的名稱,即Name的字符串參數2:要操作的包含從屬屬性的類例 DependencyProperty p = DependencyProperty.FromName("A", typeof(Activity1); System.Console.WriteLine(p.Defaul
15、tMetadata.DefaultValue); System.Console.WriteLine(p.IsAttached); System.Console.WriteLine(p.IsEvent); System.Console.WriteLine(p.Name); System.Console.WriteLine(p.OwnerType); System.Console.WriteLine(p.PropertyType); System.Console.WriteLine(p.ValidatorType);2.5 FromType 得到指定類的全部從屬屬性列表System.Workflo
16、w.ComponentModel.DependencyProperty類的靜態方法 public static IList<DependencyProperty> FromType(Type ownerType);返回值:從屬屬性集合參數1:要操作的包含從屬屬性的類 System.Collections.Generic.IList<DependencyProperty> pls; pls = DependencyProperty.FromType(typeof(Activity1); foreach (DependencyProperty temp in pls) Sy
17、stem.Console.WriteLine(temp.Name); 2.6 從屬屬性的外部注冊 public class w : System.Workflow.ComponentModel.DependencyObject private static DependencyProperty pProperty; DependencyProperty p = DependencyProperty.Register("p", typeof(string), typeof(w); w obj = new w(); obj.SetValue(p, "123"
18、); object v = obj.GetValue(p); System.Console.WriteLine(v);2.7 使用自動代碼塊添加DependencyProperty2.8 GetValue、SetValue 通過從屬屬性讀取、設置屬性值System.Workflow.ComponentModel.DependencyObject的實例方法public void SetValue(DependencyProperty dependencyProperty, object value);實例.SetValue(類.從屬屬性,值)public object GetValue(Depe
19、ndencyProperty dependencyProperty);值 = 實例.GetValue(類.從屬屬性)private Activity1 activity11;activity11 = new Activity1();activity11.SetValue(Activity1.AProperty, "值");object v = activity11.GetValue(Activity1.AProperty);2.9 .SetBinding代碼方式的從屬屬性的綁定1. 使用 System.Workflow.ComponentModel.ActivityBind
20、類進行綁定Name:要綁定Activity對象實例的NamePath:要綁定的Activity對象屬性2. 使用從屬屬性所在Activity對象的SetBinding方法進行綁定從屬屬性所在Activity對象.SetBinding(Activity對象類.從屬屬性,ActivityBind對象)3. 使用從屬屬性所在Activity對象的的RemoveProperty方法移除綁定從屬屬性所在Activity對象.RemoveProperty(Activity對象類.從屬屬性)代碼System.Workflow.ComponentModel.ActivityBind activitybind1
21、 = new System.Workflow.ComponentModel.ActivityBind();activitybind1.Name = "Workflow3" /要綁定Activity對象實例的Nameactivitybind1.Path = "S" /要綁定的Activity對象屬性/進行綁定this.activity11.SetBinding(Activity1.AProperty,activitybind1); /移除綁定/this.activity11.RemoveProperty(Activity1.AProperty);注:使用綁
22、定方式,而只是簡單賦值,直接對屬性賦值即可,也可用SetValue的方法對屬性所對應的從屬屬性賦值2.10 VS設計器進行綁定注:不使用綁定方式,而只是簡單賦值,直接在屬性欄中對屬性賦值即可2.11 XOML配置文件的從屬屬性綁定<ns0:Activity1 x:Name="activity11" A="ActivityBind Workflow3,Path=S" B="wxwinter" C="x:Null" />綁定使用 從屬屬性 = "ActivityBind 要綁定Activity對象
23、實例的Name,Path=要綁定的Activity對象屬性 "不綁定,直接賦值從屬屬性="值" 或從屬屬性="x:Null"也可以使用如下方式綁定 <ns0:Activity1 x:Name="activity11" B="wxwinter" C="x:Null" > <ns0:Activity1.A> <ActivityBind Name="Workflow3" Path="S" /> </ns0:Ac
24、tivity1.A> </ns0:Activity1 2.12 綁定方式說明1. 不能在當前類中即定義DependencyProperty,又對DependencyProperty進行綁定,要解決這種情況,最好是在父類中定義DependencyProperty,在子類中進行綁定2. 綁定后,數據會同步3. 綁定方式子主動綁父容器屬性容器內子控件DependencyProperty父主動綁子容器DependencyProperty容器內子控件屬性子直接去綁子容器容器內子控件屬性容器內子控件DependencyProperty子與子之間通過一個中介實現綁定容器屬性容器內子控件Depen
25、dencyProperty容器內子控件DependencyProperty3 DependencyProperty事件1. DependencyProperty事件本質上與DependencyProperty從屬屬性一樣,細節操作見DependencyProperty從屬屬性2. DependencyProperty事件只能綁定到事件,而不能綁定到委托 DependencyProperty事件只能賦值到委托3. 即使用+=方式為事件添加訂閱,原有的綁定也會被移除說明:事件A 綁定到 事件B事件A + = 委托1;事件B + = 委托2;觸發事件A,將執行 委托1,不會執行委托2,綁定已被清除4
26、. 多次綁定都會被執行A節點.A事件 += 委托1B節點.B事件 綁定到 A.A事件C節點.C事件 綁定到 A.A事件執行A、B、C節點,委托1會被執行3次3.1 AddHandler、RemoveHandler 通過從屬屬性添加、移除事件定閱System.Workflow.ComponentModel.DependencyObject的實例方法public void AddHandler(DependencyProperty dependencyEvent, object value);實例.AddHandler(類.DependencyProperty事件,委托)public void R
27、emoveHandler(DependencyProperty dependencyEvent, object value);實例.RemoveHandler(類.DependencyProperty事件,委托)this.AddHandler(EAEvent, new System.EventHandler(OnEA);3.2 定義一個有DependencyProperty事件的Activitypublic class Activity1:Activity /為事件綁定操作 protected override ActivityExecutionStatus Execute(ActivityE
28、xecutionContext executionContext) /第一種綁定方式 this.AddHandler(Activity1.EAEvent, new System.EventHandler(OnEA); /第二種綁定方式 /this.EA += new System.EventHandler(OnEA); return base.Execute(executionContext); /事件要執行的操作 void OnEA(object sender, EventArgs e) System.Console.WriteLine("EA"); /定義Depende
29、ncyProperty事件 public static DependencyProperty EAEvent = DependencyProperty.Register("EA", typeof(EventHandler), typeof(Activity1); /定義事件 public event EventHandler EA add base.AddHandler(Activity1.EAEvent, value); remove base.RemoveHandler(Activity1.EAEvent, value); 事件的綁定也可在類外部進行private Ac
30、tivity1 activity11;this.activity11 = new Activity1();this.activity11.EA += new EventHandler(activity11_EA);this.activity11.AddHandler(Activity1.EAEvent, new System.EventHandler(activity11_EA);3.3 SetBinding代碼方式的綁定詳細見DependencyProperty從屬屬性System.Workflow.ComponentModel.ActivityBind activitybind1 = ne
31、w System.Workflow.ComponentModel.ActivityBind();activitybind1.Name = "codeActivity3"activitybind1.Path = "ExecuteCode"this.activity11.SetBinding(WorkflowConsoleApplication2.Activity1.EAEvent, activitybind1);3.4 VS設計器進行綁定3.5 XOML配置文件的從屬屬性綁定詳細見DependencyProperty從屬屬性<CodeActivity
32、 x:Name="codeActivity1" ExecuteCode="ActivityBind activity11,Path=EA" /><CodeActivity x:Name="codeActivity2" ExecuteCode="codeActivity2_ExecuteCode" />3.6 例:在引擎中將事件方法由外部傳入using System;using System.ComponentModel;using System.ComponentModel.Design;usin
33、g System.Collections;using System.Drawing;using System.Workflow.ComponentModel.Compiler;using System.Workflow.ComponentModel.Serialization;using System.Workflow.ComponentModel;using System.Workflow.ComponentModel.Design;using System.Workflow.Runtime;using System.Workflow.Activities;using System.Work
34、flow.Activities.Rules;namespace WorkflowConsoleApplication1public sealed partial class Workflow1: SequentialWorkflowActivitypublic Workflow1()InitializeComponent(); private void InitializeComponent() this.CanModifyActivities = true; System.Workflow.ComponentModel.ActivityBind activitybind1 = new Sys
35、tem.Workflow.ComponentModel.ActivityBind(); this.codeActivity1 = new System.Workflow.Activities.CodeActivity(); activitybind1.Name = "Workflow1" activitybind1.Path = "codeActivity1_ExecuteCode1" / / codeActivity1 / this.codeActivity1.Name = "codeActivity1" this.codeActi
36、vity1.SetBinding(System.Workflow.Activities.CodeActivity.ExecuteCodeEvent, (System.Workflow.ComponentModel.ActivityBind)(activitybind1); / / Workflow1 / this.Activities.Add(this.codeActivity1); this.Name = "Workflow1" this.CanModifyActivities = false; private CodeActivity codeActivity1; public Syst
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信訪屬地管理制度
- 公司健身房管理制度
- 公司巡防隊管理制度
- 公司租賃房管理制度
- 養老市場部管理制度
- 前廳10條管理制度
- 醫院18項管理制度
- 培訓室制度管理制度
- 對講機4d管理制度
- 小裝修公司管理制度
- 期末試卷(試題)(含答案)-2024-2025學年一年級下冊數學北師大版
- 上海浦東新區公辦學校儲備教師教輔招聘筆試真題2022
- 上海市社區工作者管理辦法
- 國開(甘肅)2024年春《地域文化(專)》形考任務1-4終考答案
- 消防安全工作臺賬-消防臺賬記錄
- 金日-冷卻塔與節能
- 中考數學《分式及分式方程》計算題(附答案)
- 用人單位用工備案花名冊
- 機械式立體停車庫綜述(培訓)課件
- 電氣化鐵路有關人員電氣安全規則
- 碧桂園集團甲指、甲供材料采購管理辦法
評論
0/150
提交評論