Я пытаюсь создать расширение разметки, которое упрощает запись URI для свойства Source WPF ResourceDictionary.MarkupExtension в ResourceDictionary.Source свойство
Минимальный пример проблемы заключается в следующем:
CS:
public class LocalResourceExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new Uri("Resources.xaml", UriKind.Relative);
}
}
XAML:
<UserControl ...>
<UserControl.Resources>
<ResourceDictionary Source="{mw:LocalResource}" /> <!-- error MC3022 -->
<!-- <ResourceDictionary Source="Resources.xaml" /> --> <!-- Works fine -->
</UserControl.Resources>
<!-- ... -->
</UserControl>
Это не компилировать с следующей ошибкой:
error MC3022: All objects added to an IDictionary must have a Key attribute or some other type of key associated with them.
Однако, если я заменю расширение разметки постоянным значением (как показано в комментариях), все работает нормально.
Почему версия с расширением разметки не работает? Есть ли обходной путь?
Я использую MSVC 2015
Вы пытались поместить его в ''? –
@EdPlunkett Отличное обходное решение, спасибо. Не думал об этом. Тем не менее, в этом случае мое расширение не «упрощает», потому что оно добавляет еще 4 строки для каждого использования ... – nevermind
Он также не работает во время разработки, поэтому он синим-squiggles элемент ResourceDictionary. Безвредный, но раздражающий. Реальное решение здесь, я думаю, состоит в том, чтобы просто написать обычный словарь ресурсов, который объединяет все, что вам нужно, и включать это явно. –