【问题标题】:Using a Markup Extension as value of property Setter in XAML. {0} is not valid for Setter.Value. The only supported MarkupExtension types are在 XAML 中使用标记扩展作为属性 Setter 的值。 {0} 对 Setter.Value 无效。唯一支持的 MarkupExtension 类型是
【发布时间】:2018-07-05 11:33:07
【问题描述】:

下面是一个很小的例子,如何获得这个exception。这已经是一个已知问题(超过 7 年!)。是否已经有解决方案?


异常

FooExtension 对 Setter.Value 无效。 唯一受支持的 MarkupExtension 类型是
DynamicResourceExtension 和 BindingBase 或派生类型。

C#类

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

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return new SolidColorBrush((Color)ColorConverter.ConvertFromString(Key));
    }
}

这不是我使用的原始类/MarkupExtension,但逻辑(返回 SolidColorBrush)是相同的,并且给出完全相同的错误/行为。

  • 设计时出现异常
  • 重建解决方案后设计器出现异常
  • 运行时没有问题

XAML 用法

Background="{extensions:Foo Key=#FFF37C21}"

extension 工作到昨天已经一年多了!包括每个 Windows、VisualStudio 或任何其他更新!现在从 1 天开始,我在设计期间就遇到了这种错误行为!

我正在使用:

  • VS15.7.3
  • .NET Framework 4.7.02556

来源:


绑定解决方法(不起作用)

在某些页面上,据说您应该使用binding。但是我遇到了同样的错误/行为!

顺便说一句。我在Storyboard 中使用了这个标记扩展,所以无论如何我不能返回binding

    public override object ProvideValue(IServiceProvider serviceProvider)
    {            
        Binding binding = new Binding();
        binding.Source = new SolidColorBrush((Color)ColorConverter.ConvertFromString(Key));

        return binding.ProvideValue(serviceProvider);
    }

【问题讨论】:

    标签: c# wpf xaml markup-extensions


    【解决方案1】:

    我解决了这个问题!我是一种XAML Resources 的关系。我在App.xaml 中定义了一个ResourceDictionary,它已经在AssemblyInfo.cs 中定义为XmlnsPrefix / XmlnsDefinition

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2021-07-05
      相关资源
      最近更新 更多