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,而是关于为库中的自定义标记扩展自定义结果。