[英]Is there attached property in C# itself?
在C#本身,WPF中是否有類似“附加屬性”的東西?
最簡潔的答案是不。 稍微長一點的答案是,這是一個不幸的故事。 我們為C#4設計了“擴展屬性”,當我們意識到,哦,等等,我們設計的東西與WPF風格的屬性並不真正兼容時,就實現了(但沒有測試)它們。 我們最終削減了它,而不是重新設計和重新實現該功能。
更長的版本在這里:
http://blogs.msdn.com/b/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx
AttachedProperties是.NET Framework的一部分,不是C#語言規范的一部分,特別是System.Activities.Presentation.Model命名空間的一部分,它是WPF特定的。
在WPF中,附加屬性允許您執行以下操作:
<TextBlock Grid.Row="2" Text="I know nothing about grids!" />
這就像將C#中的類定義為:
public class TextBlock
{
public string Text { get; set; }
}
能夠做到這一點:
var tb = new TextBlock();
tb.Grid.Row = 2; // this line would not compile
為了使這項工作,您需要將Grid
對象傳遞到TextBlock類:
public class TextBlock
{
public string Text { get; set; }
public Grid Grid { get; set; }
public TextBlock(Grid grid)
{
Grid = grid;
}
}
但我認為沒有任何東西直接等同於附加屬性在WPF中的工作方式。 你需要手工制作它。
你想達到什么目的?
您可以使用ConditionalWeakTable<TKey, TValue>
類將任意狀態附加到實例。 您可以將它與擴展方法結合使用以創建擴展屬性的形式,但遺憾的是沒有在C#中使用nice屬性語法。
我想你在考慮吸氣劑和制定者。
它們是這樣創建的:
public class Person
{
//default constructor
public Person()
{
}
private string _Name;
public string Name
{
//set the person name
set { this._Name = value; }
//get the person name
get { return this._Name; }
}
}
有關它們如何在這里工作的更多信息: http : //msdn.microsoft.com/en-us/library/aa287786(v = vs.71).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.