Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为XAML中的自定义标记扩展提供Intellisense_C#_Wpf_Xaml_Intellisense_Markup Extensions - Fatal编程技术网

C# 为XAML中的自定义标记扩展提供Intellisense

C# 为XAML中的自定义标记扩展提供Intellisense,c#,wpf,xaml,intellisense,markup-extensions,C#,Wpf,Xaml,Intellisense,Markup Extensions,我创建了一个自定义的MarkupExtension,它允许以一种简单的方式将事件从FrameworkElements转发到视图模型上的方法。除了VisualStudio在填充XAML时不提供任何Intellisense之外,其他一切都可以完美地工作。是否有任何方法可以向VisualStudio提供提供Intellisense所需的信息 标记扩展名: public class VmCall : MarkupExtension { public string ActionName { get

我创建了一个自定义的
MarkupExtension
,它允许以一种简单的方式将事件从
FrameworkElements
转发到视图模型上的方法。除了VisualStudio在填充XAML时不提供任何Intellisense之外,其他一切都可以完美地工作。是否有任何方法可以向VisualStudio提供提供Intellisense所需的信息

标记扩展名

public class VmCall : MarkupExtension
{
    public string ActionName { get; }

    public VmCall(string actionName)
    {
        ActionName = actionName;
    }
    //.....
}
视图模型:

class TestWindowVm : ViewModel
{
    public void Click()
    {
        MessageBox.Show("Click!");
    }
}
在XAML中使用
标记扩展名

<Window
    x:Class="WpfLib.Tests.VmCallMarkupExtension.TestWindow"   
    xmlns:wpfLib="clr-namespace:AgentOctal.WpfLib;assembly=WpfLib"
    //Many xmlns and attributes left out of example for brevity.
    d:DataContext="{d:DesignInstance TestWindowVm}"
    mc:Ignorable="d">
    <Button Click="{wpfLib:VmCall Click}"/>
</Window>

理想情况下,当用户在“VmCall”后按空格键时,Intellisense应向他们显示当前元素的
DataContext
上的所有方法的列表(在此特定示例中,只需
单击
上的
TestWindowVm

如果有某种方法可以做到这一点,根据以前使用WinForms的经验,我希望可以在
VmCall
的构造函数参数上添加某种
属性,从而通知Visual Studio如何为该参数生成intellisense。到目前为止,我还没有找到类似的东西。我不确定我是否真的在寻找错误的东西,或者这根本不可能。如果重要的话,我主要对Visual Studio 2017感兴趣


我已经查看了中列出的所有属性,但没有任何明显的问题出现。

您已经使用字符串输入创建了一个MarkupExtension。Intellisense如何知道您想要哪个字符串?但是,例如,如果你使用一个枚举,Intellisense会给你很多建议

public enum MyEnum
    {
        first , second 
    }

public class VmCall : MarkupExtension
{
    public MyEnum ActionName { get; }

    public VmCall(MyEnum actionName)
    {
        ActionName = actionName;
    }
    //.....
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}

我认为这是不可能的(好吧,如果不写像VS扩展那样的东西)。整个intellisense似乎是硬编码的(例如,绑定构造函数也接受字符串,并且没有任何属性,但intellisense知道为它显示VM属性)。当您在编辑器中将鼠标移到我的标记上时,VisualStudio 2017确实正确地显示了预期的类型,但遗憾的是,在这种情况下,VisualStudio也不提供Intellisense。如果你有什么发现,希望能收到你的来信。不幸的是,我还没有解决办法。使用我的库的人只需要知道如何正确调用它,就像在VisualStudio出现之前的编程黑暗时代一样。如果我能找到解决方案,我会在这里留言。嗨!你找到解决办法了吗?谢谢你advance@VimalCK这不是关于常规intellisense,而是关于为库中的自定义标记扩展自定义结果。