IRootObjectProvider не доступен в конструкторе? - PullRequest
1 голос
/ 24 июня 2011

Я немного новичок в WPF, так что будьте спокойны со мной, ребята!

Я пытаюсь реализовать MarkupExtension, в котором я хочу сослаться на корневой элемент XAML, который вызывает расширение (мне нужен его элемент Name для поиска).

Следующий код прекрасно работает во время выполнения, но во время разработки я получаю сообщение об ошибке в окне конструктора.

[MarkupExtensionReturnTypeAttribute(typeof(string))]
public class TranslateExtension : MarkupExtension
{

    public TranslateExtension(string key)
    {
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        var root = ((System.Xaml.IRootObjectProvider)serviceProvider).RootObject as FrameworkElement;
        return root.Name;
    }

}

выдает ошибку в конструкторе:

Невозможно привести объект типа InstanceBuilderServiceProvider для тип 'System.Xaml.IRootObjectProvider'.

Что само собой разумеется - очевидно, что ProvideValue вызывается с поставщиком услуг, который не может быть преобразован в RootObjectProvider.

Есть ли работа вокруг? Или я делаю что-то действительно глупое?

Ответы [ 3 ]

1 голос
/ 09 июля 2012

Разве вы не должны делать что-то вроде

var service = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider));

Однако это все равно не помогает конструктору ...

0 голосов
/ 05 августа 2013

Попробуйте это:

var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
0 голосов
/ 24 июня 2011

IRootObjectProvider недоступен в WPF 4 на данный момент, он будет включен в будущем. Вы можете программно использовать Xaml Services, которые поддерживают IRootObjectProvider, но WPF пока не поддерживает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...