2010-08-05 82 views
4

嘿所以我在Silverlight中有一個自定義控件。其實並不重要,但它是一個帶有樹形視圖,滑塊和其他垃圾的大型組合。將屬性暴露給Silverlight中的Intellisense

現在在控制中我們有一個名爲defaultTemplate的實例變量。它是DataTemplate類型的。基本上它是TreeViewItem用作其頭文件模板的模板,除非應用程序開發人員調用myControl.setTemplate(DataTemplate dt);

只需通過使公共財產,並給予它的getter和setter,它出現時,我鍵入下面的智能感知...

<myNamespace:myControl x:Name="theControl" defa 

智能感知上,我班有一個defaultTemplate財產的事實回升並將其列爲選項。

我想什麼:

我想對於上述功能將繼續,但對於智能感知功能添加到自動列出該值的選項。所以我有這些數據模板定義在控件可以訪問的資源字典中。我希望他們能當我到打字的這部分彈出的選項:

<myNamespace:myControl x:Name="theControl" defaultTemplate="_" 

我的功能,尋找可以在TextBlock中的前景財產被發現。當你鍵入

foreground=""其開始列出顏色供您選擇。我將把常量定義爲我的數據模板的名稱,並且從那些或類似的東西中選擇智能感知。

我該如何實現這個目標?謝謝!


澄清編輯:我需要智能感知認識這些都爲XAML屬性接受輸入常數的列表。所以我的defaultTemplate屬性可以只是一個字符串。我將在後面的代碼中處理該字符串的含義。但是我需要intellisense知道哪些字符串可以在XAML中輸入該屬性。一旦您輸入報價,前景色會在智能感知中彈出一個列表,如「Azure,Beige ... LemonChiffon ...」等。我該如何提供智能感知列表? 謝謝!


最後編輯:感謝siege898現在我可以選擇我的defaultTemplate從智能感知爲我提供一個列表值。不過,我也希望能夠給應用程序開發人員(使用我的控件)一個選項來定義他們自己的數據模板並指定它的名稱。

因此,例如,Bob在他的應用程序中使用我的控件。我提供的模板都不適合他。因此Bob在資源字典中創建了一個名爲bobTemplate的應用程序的數據模板。我希望Bob能夠在xaml defaultTemplate="bobTemplate"的defaultTemplate字段中輸入,並且不會引發錯誤。我相信我現在遇到的問題是因爲該字段在我的枚舉中期待值。有誰知道我可以如何設置這兩個給我下拉列表生成的枚舉,但仍然接受自定義字符串? 我在想一個類型轉換器,但我不知道如何使用它爲我想要的...

回答

4

我想你的工作是一個枚舉屬性。 因此,這裏是我的建議:

public enum Templates 
{ 
    Template1, Template2, ... 
} 

public Templates defaultTemplates 
{ 
    get; 
    set; 
} 

然而,由於它的枚舉的屬性,當用戶通過一個值(例如模板1),應用程序將看到,作爲一個整數(0 =模板1,1 =則Template2 ...)

因此,我還建議保留某種字典或具有查找功能,將每個整數映射到所需的模板。 (或者甚至像上面提到的類型轉換器)

我不是100%確定爲什麼這會增加intellisense,但是根據我的經驗,即使在XAML中也是如此。我認爲VS看到defaultTemplates必須設置爲模板中的一個值,然後填充列表。

希望這是你在找什麼。

+0

謝謝,工作!任何人都知道intellisense如何意識到枚舉值? – NickHalden 2010-08-09 15:38:45

3

除非您公開枚舉,哪個智能感知將從屬性和依賴項屬性中定義爲枚舉,您將需要提供一個類型轉換器。這就是爲XAML解析器提供「指令」來將字符串解析爲其他類型的原因。

看看這裏爲背景: http://msdn.microsoft.com/en-us/library/cc645047(VS.95).aspx

然後看看這裏的教程: http://umairsaeed.com/2010/02/03/creating-a-custom-xaml-typeconverter/

前景的情況下,例如,該屬性被映射到靜態顏色類提供在XAML中表示的值列表。

+0

嗯,好吧,但我真正想要的,我認爲是您的文章的第一部分。如何提供智能感知以及價值選擇的知識?所以在前面的例子中,我該怎麼做映射到彈出的顏色列表?謝謝 – NickHalden 2010-08-05 18:54:12