在Silverlight中将属性公开给Intellisense

时间:2010-08-05 17:05:02

标签: c# silverlight intellisense

嘿SO,所以我在Silverlight中有一个自定义控件。它真的不重要,但它是一个很大的复合物,有树视图,滑块和其他一些垃圾。

现在在控件中我们有一个名为defaultTemplate的实例变量。它是DataTemplate类型。基本上它是TreeViewItem用作标题模板的模板,除非应用程序开发人员调用myControl.setTemplate(DataTemplate dt);

只需将该属性公开并将其设为getter和setter,当我键入以下内容时,它会显示在intellisense中...

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

Intellisense了解到我的类具有defaultTemplate属性并将其列为选项。

我想要的是什么:

我希望上述功能能够继续,但为intellisense添加功能以自动列出值的选项。所以我在控件可以访问的资源字典中定义了这些数据模板。当我进入这部分输入时,我希望它们作为选项弹出:

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

我正在寻找的功能可以在TextBlock的foreground属性中找到。当你输入

foreground=""它开始列出颜色供您选择。我可以将常量定义为我的数据模板的名称,并让intellisense从那些或那样的东西中选择。

我怎样才能实现这一目标?谢谢!


澄清编辑:我需要让intellisense知道一个常量列表,这些常量是xaml属性可接受的输入。所以我的defaultTemplate属性可以只是一个字符串。我将在后面的代码中处理该字符串的含义。但我需要intellisense知道在XAML中可以输入哪些字符串。键入引号后,前景色会在intellisense中弹出一个列表,如“Azure,Beige ... LemonChiffon ...... etc.”如何向该列表提供intellisense?  谢谢!


最终编辑:感谢siege898,我现在可以从intellisense为我提供的列表中选择defaultTemplate的值。但是,我还希望能够为应用程序开发人员(使用我的控件)提供一个选项来定义他们自己的数据模板并指定它的名称。

例如,Bob正在他的应用程序中使用我的控件。我提供的所有模板都不适合他。因此Bob在资源字典中为他的应用程序创建了一个名为bobTemplate的数据模板。我希望Bob能够输入xaml defaultTemplate="bobTemplate"中的defaultTemplate字段,而不会抛出错误。我相信我现在遇到的问题是因为该字段在我的枚举中期望值。有谁知道我怎么设置这两个都给我从枚举生成的下拉列表,但仍然接受自定义字符串? 我在想一个类型转换器,但我不确定如何将它用于我想要的......

2 个答案:

答案 0 :(得分:4)

我认为你所做的是一个枚举属性。 所以这就是我的建议:

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

public Templates defaultTemplates
{
   get;
   set;
}

但是,因为它是一个枚举属性,当用户传递一个值(例如Template1)时,应用程序会将其视为一个整数(0 = Template1,1 = Template2 ......)

所以我还建议保留某种字典,或者使用查找函数将每个整数映射到你想要的模板。 (或者甚至是上面提到的类型转换器)

我不是百分之百确定为什么这会增加智能感知,但根据我的经验,即使在XAML中也是如此。我认为VS看到defaultTemplates必须设置为Templates中的一个值,然后填充列表。

希望这是你正在寻找的。

答案 1 :(得分:3)

除非您公开枚举,其中intellisense将从定义为枚举的属性和依赖项属性中获取,否则您将需要提供类型转换器。这就是为XAML解析器提供“指令”以将字符串解析为其他类型的原因。

在这里查看背景信息: http://msdn.microsoft.com/en-us/library/cc645047(VS.95).aspx

然后看看这里的教程: http://umairsaeed.com/2010/02/03/creating-a-custom-xaml-typeconverter/

例如,在前景的情况下,该属性被映射到静态Colors类,该类提供在XAML中表示的值列表。