MarkupExtension:在设计时不评估更改构造函数参数

MarkupExtension: changing constructor argument is not evaluated in design time

这是它的样子:

更改标记扩展时 Key 属性 - 一切正常。

更改标记扩展构造函数参数时 - 它不会更新。解决方法是使用扩展名更新 属性(更改 Text),然后返回。然后正确评估值。

这是分机:

public class MyExtension : MarkupExtension
{
    public string Key { get; set; }

    public MyExtension() { }

    public MyExtension(string key)
    {
        Key = key;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Key;
    }
}

关于如何使设计器以与 属性 相同的方式使用构造函数参数的任何想法?

似乎可以补救这种情况的方法是像这样使用 ConstructorArgumentAttribute

public class MyExtension : MarkupExtension
{
    [ConstructorArgument("key")]
    public string Key { get; set; }

    public MyExtension() { }

    public MyExtension(string key)
    {
        Key = key;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Key;
    }
}