Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# MarkupExtension:未在设计时计算更改构造函数参数_C#_Wpf_Markup Extensions_Xaml Designer - Fatal编程技术网

C# MarkupExtension:未在设计时计算更改构造函数参数

C# MarkupExtension:未在设计时计算更改构造函数参数,c#,wpf,markup-extensions,xaml-designer,C#,Wpf,Markup Extensions,Xaml Designer,下面是它的样子: 更改标记扩展名键属性时-一切正常 更改标记扩展构造函数参数时-它不会更新。解决方法是使用扩展名更新属性(更改Text),然后返回。然后正确计算值 这是分机号码: public class MyExtension : MarkupExtension { public string Key { get; set; } public MyExtension() { } public MyExtension(string 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;
    }
}

关于如何使设计器以与属性相同的方式使用构造函数参数,您有什么想法吗?

解决这种情况的方法是使用
构造函数参数属性
如下所示:

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

你使用的是哪个版本的VS?@IlVic,没想到可能是VS bug。使用Microsoft Visual Studio Community 2015版本14.0.24720.00更新1。请告诉我它是否适用于您。您的MarkupExtension非常适用于—例如—Visual Studio 2010高级版(版本10.0.40219.1 SP1Rel)。如果需要,我也可以向Visual Studio 2013查询。但是我没有Visual Studio2015@IlVic,你确定吗?尝试在xaml中更改{local:My 1}->
{local:My 123}
是否在每次更改后在设计器窗口中正确更新
{local:My Key=123}
可以工作,但是当我尝试更改时,如果没有
键,它将保持不变。我试图禁用扩展,但问题仍然存在。是的,我确定。我复制了您的
MyExtension
代码,然后构建了我的解决方案。然后,如果我在
{local:My abc}
中更改
{local:My a}
,那么“abc”将立即在XAML预览中呈现(或者您喜欢的设计器)。