gpt4 book ai didi

c# - 在 XAML 中为自定义 MarkupExtension 提供 Intellisense

转载 作者:行者123 更新时间:2023-12-02 00:02:50 25 4
gpt4 key购买 nike

我创建了一个自定义 MarkupExtension,它允许以一种简单的方式将事件从 FrameworkElements 转发到 View 模型上的方法。一切都很完美,除了 Visual Studio 在填写 XAML 时不提供任何 Intellisense 之外。有什么方法可以向 Visual Studio 提供提供 Intellisense 所需的信息吗?

标记扩展:

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

public VmCall(string actionName)
{
ActionName = actionName;
}
//.....
}

View 模型:

class TestWindowVm : ViewModel
{
public void Click()
{
MessageBox.Show("Click!");
}
}

在 XAML 中使用 MarkupExtension:

<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 上的所有方法的列表(只需 Click 在这个特定示例中的 TestWindowVm 上)。

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

我已经查看了 System.Windows.Markup 中列出的所有属性,并没有什么明显的事情让我惊讶。

最佳答案

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

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;
}
}

关于c# - 在 XAML 中为自定义 MarkupExtension 提供 Intellisense,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46817182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com