2010-08-05 154 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