日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WF,WPF,Silverlight的DependencyProperty 附加属性

發(fā)布時間:2025/7/14 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WF,WPF,Silverlight的DependencyProperty 附加属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

WF,WPF,Silverlight的DependencyProperty 附加屬性

注意,是DependencyProperty 附加屬性,而不是綁定屬性

?

?

例子: http://files.cnblogs.com/foundation/Projects.rar

?

首先看一個假設,

在不修改一個類的前提下,如何擴展一個類的成員(繼承也不可以)

這在傳統(tǒng)的OO設計中是無法完成的,但在NET3.0(C#3.0,VB.NET9.0)中提供了擴展方法開實現(xiàn)這一功能

看下例:

場景:我經常要用得到數字除2的結果,如何方便的實現(xiàn)

class Program

{

static void Main(string[] args)

{

double v1 = 123;

double p1 = v1.zzzzz();

System.Console.WriteLine(p1);

?

//--

double p2=(1234567890.123).zzzzz();

System.Console.WriteLine(p2);

}

}

?

static class myExtension

{

public static double zzzzz(this double d)

{

return d/2 ;

}

}

?

這就是擴展方法,在不修改的結構的情況下,為[ double ]添加了[zzzzz]這個方法

linq 用的就是這種方式

?

方法可以這樣做,那屬性哪?

?

升級一下需求,我想一個對象在一個環(huán)境中自動多出某幾個屬性,在另外一個環(huán)境中又自動多出另外幾個屬性

如何做,

先看一下Silverlight

場景:提供一個容器,容器分兩排,放入容器內的件意控件都可設置附加屬性[myTag]的屬性,[myTag]屬性設為[a]的在左邊,設為[b]的在右邊

容器

public class wxdPanel : StackPanel

{

StackPanel p1 = new StackPanel();

StackPanel p2 = new StackPanel();

public wxdPanel()

: base()

{

p1.Width = 200;

p2.Width = 200;

p1.Background = new System.Windows.Media.SolidColorBrush(new Color() { R = 0, G=255, B=0 , A=255});

p2.Background = new System.Windows.Media.SolidColorBrush(new Color() { R = 0, G = 0, B = 255, A = 255 });

this.Orientation = Orientation.Horizontal;

this.Children.Add(p1);

this.Children.Add(p2);

this.Loaded += new RoutedEventHandler(wxdPanel_Loaded);

}

List<FrameworkElement> list = new List<FrameworkElement>();

void wxdPanel_Loaded(object sender, RoutedEventArgs e)

{

foreach (var p in this.Children)

{

if (p is StackPanel)

{

}

else

{

list.Add((FrameworkElement)p);

}

}

?

foreach (var v in list)

{

?

this.Children.Remove(v);

?

if (wxdPanel.GetmyTag(v) == "a")

{

p1.Children.Add(v);

}

if (wxdPanel.GetmyTag(v) == "b")

{

p2.Children.Add(v);

}

}

}

public static string GetmyTag(DependencyObject obj)

{

return (string )obj.GetValue(myTagProperty);

}

public static void SetmyTag(DependencyObject obj, string value)

{

obj.SetValue(myTagProperty, value);

}

public static readonly DependencyProperty myTagProperty = DependencyProperty.RegisterAttached("myTag", typeof(string ), typeof(wxdPanel),new PropertyMetadata(""));

?

}

使用

<UserControl x:Class="SilverlightApplication1.Page"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Width="400" Height="300" xmlns:mytype="clr-namespace:SilverlightApplication1">

<mytype:wxdPanel >

<Button Name="Button1" mytype:wxdPanel.myTag="a" Height="53" Width="75" Content="Button1" />

<TextBox Name="TextBox1" mytype:wxdPanel.myTag="a" Height="23" Width="120" Text="TextBox1"/>

<Button Name="Button2" mytype:wxdPanel.myTag="a" Height="53" Width="75" Content="Button2" />

<TextBox Name="TextBox2" mytype:wxdPanel.myTag="b" Height="23" Width="120" Text="TextBox2" />

<Button Name="Button3" mytype:wxdPanel.myTag="a" Height="53" Width="75" Content="Button3" />

<TextBox Name="TextBox3" mytype:wxdPanel.myTag="b" Height="23" Width="120" Text="TextBox3"/>

</mytype:wxdPanel>

?

</UserControl>

?

效果

?

WPF的實現(xiàn)

與Silverlight 相同

再看一下WF的實現(xiàn)

場景:提供一個容器,放入容器內的件意Activity會多出一個明為[myTag]的屬性,[myTag]屬性設為[a]的執(zhí)行,設為[b]的不執(zhí)行

?

先創(chuàng)建這個容器Activity

[Designer(typeof(myDesigner), typeof(IDesigner))]

public partial class myContainer : System.Workflow.ComponentModel.CompositeActivity

{

//-

public static string GetmyTag(object obj)

{

DependencyObject dObject = obj as DependencyObject;

object value = dObject.GetValue(myTagProperty);

return value.ToString();

}

public static void SetmyTag(object obj, string value)

{

DependencyObject dObject = obj as DependencyObject;

dObject.SetValue(myTagProperty, value);

}

public static readonly DependencyProperty myTagProperty = DependencyProperty.RegisterAttached("myTag", typeof(string), typeof(myContainer), new PropertyMetadata(""));

public static string GetleftValue(object obj)

{

DependencyObject dObject = obj as DependencyObject;

object value = dObject.GetValue(leftValueProperty);

return value.ToString();

}

public static void SetleftValue(object obj, object value)

{

DependencyObject dObject = obj as DependencyObject;

dObject.SetValue(leftValueProperty, value);

}

public static readonly DependencyProperty leftValueProperty = DependencyProperty.RegisterAttached("leftValue", typeof(string), typeof(myContainer), new PropertyMetadata(""));

int n = 0;

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)

{

n = this.EnabledActivities.Count;

?

if (n == 0)

{

return ActivityExecutionStatus.Closed;

}

?

foreach (Activity activity in this.EnabledActivities)

{

n = n - 1;

string l = myContainer.GetmyTag(activity);

?

?

if (l == "a")

{

activity.Closed += new EventHandler<ActivityExecutionStatusChangedEventArgs>(activity_Closed);

executionContext.ExecuteActivity(activity);

}

}

?

return ActivityExecutionStatus.Executing;

}

?

void activity_Closed(object sender, ActivityExecutionStatusChangedEventArgs e)

{

ActivityExecutionContext executionContext = sender as ActivityExecutionContext;

if (n == 0)

{

executionContext.CloseActivity();

}

}

}

?

[ProvideProperty("myTag", typeof(Activity))]

public class myExtenderProvider : IExtenderProvider

{

public bool CanExtend(object extendee)

{

return (((extendee != this) && (extendee is Activity)) && (((Activity)extendee).Parent is myContainer));

}

//-

public string GetmyTag(Activity activity)

{

if (activity.Parent is myContainer)

{

return activity.GetValue(myContainer.myTagProperty).ToString();

}

return null;

}

public void SetmyTag(Activity activity, string value)

{

if (activity.Parent is myContainer)

{

activity.SetValue(myContainer.myTagProperty, value);

}

}

}

?

public class myDesigner : SequenceDesigner

{

protected override void Initialize(Activity activity)

{

base.Initialize(activity);

IExtenderListService service = (IExtenderListService)base.GetService(typeof(IExtenderListService));

if (service != null)

{

bool tag = false;

foreach (IExtenderProvider provider in service.GetExtenderProviders())

{

if (provider.GetType() == typeof(myExtenderProvider))

{

tag = true;

}

}

if (!tag)

{

IExtenderProviderService tempService = (IExtenderProviderService)base.GetService(typeof(IExtenderProviderService));

if (tempService != null)

{

tempService.AddExtenderProvider(new myExtenderProvider());

}

}

}

}

}

?

然后設計工作流

運行結果

?

總結

以上是生活随笔為你收集整理的WF,WPF,Silverlight的DependencyProperty 附加属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级黄色片在线观看 | 91精品国产乱码久久久久 | 在线视频在线观看 | 全部免费毛片在线播放高潮 | 一本大道久久 | 精品国产乱码久久久久久久 | 日日射射 | avtt亚洲天堂 | 亚洲男人天堂2024 | 亚洲视频在线观看免费 | 免费网站看av | 日本免费网 | 中文字幕蜜桃 | 国产精品swag | 性少妇mdms丰满hdfilm | 国产精品久久久久久久av | 99热精品国产| 国产激情视频在线观看 | 最近高清中文在线字幕在线观看 | 久久国产夫妻 | 极品白嫩少妇无套内谢 | 黄色网址在线看 | 黄色录像一级大片 | 中文字幕亚洲一区二区三区五十路 | 波多野吉衣一区二区 | 成人av中文解说水果派 | 91看片黄色 | 亚洲蜜臀av一区二区三区 | a国产| 一二三区在线播放 | 欧美成人精品一区二区三区 | 日韩夫妻性生活 | 男人用嘴添女人下身免费视频 | 老色批永久免费网站www | 黄色一级一片免费播放 | 日韩在线观看精品 | 国产精品看片 | 在线视频免费播放 | 男女做爰真人视频直播 | 精品成人中文无码专区 | av免费的 | 成人午夜影院 | 成人在线观看一区二区 | 久久社区视频 | 亚洲午夜精品一区二区三区他趣 | 亚洲va天堂va欧美ⅴa在线 | 91中文在线观看 | 国产成人高清 | 97免费超碰 | 捆绑最紧bdsm视频 | 成人av教育 | 91精品久久香蕉国产线看观看 | 牛牛av国产一区二区 | 另类欧美日韩 | 午夜精品99 | 日本55丰满熟妇厨房伦 | 国产免费成人 | 天堂成人在线 | 日韩成人av在线 | 国产精品久久久av | 性欧美大战久久久久久久久 | 少妇人妻一区二区三区 | jizz日本少妇| 97视频在线免费观看 | 国产综合无码一区二区色蜜蜜 | 操少妇视频 | 69av视频在线 | 国产最新在线 | 国产资源在线播放 | 欧美日韩精品一区二区在线观看 | 又大又粗欧美黑人aaaaa片 | 黄色成人在线 | 在线看黄色网 | 天天操天天曰 | 手机成人免费视频 | 蜜臀久久99精品久久久久久宅男 | 中文字幕a√ | 伊人导航 | 亚洲成人一区二区三区 | 免费黄色链接 | 中文字幕亚洲专区 | 亚洲快播 | 日本久久精品 | 中文字幕一区二区三三 | 久久精品国产99国产精品 | 北京富婆泄欲对白 | 一级黄色大片视频 | 96精品视频在线观看 | 日韩欧美一区二区三区视频 | brazzers欧美一区二区 | 美女在线一区 | 国产精品视频区 | 国产jjizz一区二区三区视频 | 亚洲2022国产成人精品无码区 | 亚洲成人三级 | 青草草在线| 久久久久久国产精品免费 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 久久久久无码国产精品不卡 |