Использование расширения разметки в качестве значения свойства Setter в XAML. {0} недопустимо для Setter.Value. Поддерживаются только типы MarkupExtension - PullRequest
0 голосов
/ 05 июля 2018

Ниже приведен очень маленький пример, как получить это 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 работал до вчерашнего дня более 1 года! Включая каждое 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);
    }

1 Ответ

0 голосов
/ 06 июля 2018

Я решил проблему! У меня были какие-то XAML Resources отношения. Я определил ResourceDictionary внутри App.xaml, который уже был определен в AssemblyInfo.cs как XmlnsPrefix / XmlnsDefinition!

...