【问题标题】:Exposing properties to Intellisense in Silverlight在 Silverlight 中向 Intellisense 公开属性
【发布时间】:2010-08-05 17:05:02
【问题描述】:

嘿,所以我在 Silverlight 中有一个自定义控件。它是什么并不重要,但它是一个包含树视图、滑块和其他垃圾的大型复合物。

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

只需将属性公开并为其提供 getter 和 setter,当我键入以下内容时,它就会以智能感知方式显示...

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

Intellisense 发现我的类有一个 defaultTemplate 属性并将其列为一个选项。

我想要什么:

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

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

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

foreground="" 它开始列出颜色供您选择。我可以将常量定义为我的数据模板的名称,并让智能感知从这些或类似的东西中进行选择。

我怎样才能做到这一点?谢谢!


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


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

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

【问题讨论】:

    标签: c# silverlight intellisense


    【解决方案1】:

    我认为您正在为一个枚举属性工作。 所以这是我的建议:

    public enum Templates
    {
        Template1, Template2, ...
    }
    
    public Templates defaultTemplates
    {
       get;
       set;
    }
    

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

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

    我不能 100% 确定为什么这会增加智能感知,但根据我的经验,它总是如此,即使在 XAML 中也是如此。我认为 VS 认为 defaultTemplates 必须设置为 Templates 中的值之一,因此它会填充列表。

    希望这就是你要找的。​​p>

    【讨论】:

    • 谢谢,辛苦了!有人知道智能感知是如何意识到枚举值的吗?
    【解决方案2】:

    除非您要公开一个枚举,智能感知将从定义为枚举的属性和依赖属性中获取该枚举,否则您将需要提供一个类型转换器。这就是为 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 中表示的值列表。

    【讨论】:

    • 嗯,好的,但我真正想要的是你帖子的第一部分。我如何为智能感知提供价值选择的知识?那么在前景示例中,如何映射到弹出的颜色列表?谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多