#c_sharp #wpf #net #xaml
К примеру, имеем такое расширение разметки:
using System;
using System.Windows.Markup;
namespace CustomMarkupExtensions
{
public class HelloExtension : MarkupExtension
{
public HelloExtension() { }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return "Hello";
}
}
}
Код XAML. Пытаюсь использовать расширение в качестве ключа в ResourceDictionary:
Пример
При компиляции возникает ошибка:
(6,20): error MC3012:
ключ словаря не может иметь тип "CustomMarkupExtensions.HelloExtension".
Поддерживаются только типы String, TypeExtension и StaticExtension. Строка 6 позиция 20.
Хотя в описании директивы x:Key указано, что расширения разметки использоваться могут.
В чем дело?
Ответы
Ответ 1
В справке всё указано верно: в x:Key можно использовать расширения разметки, но только два: TypeExtension и StaticExtension. Пользовательские расширения разметки не поддерживаются, кроме наследников ResourceKey. (Также x:Key может содержать произвольное значение, но указать его можно только с помощью одного из перечисленных выше расширений разметки.) Это ограничение было снято в XAML 2009, вот только этот "стандарт" по сути не поддерживается. В XAML 2006, который, похоже, с нами навсегда, можно пойти обходным путём: положить значение в статическое свойство, затем указать его через x:Static.
Комментариев нет:
Отправить комментарий