Регистрация пользовательского протокола URI для обработки пользовательской загрузки ресурсов из XAML - PullRequest
5 голосов
/ 22 октября 2011

Я работаю над проектом, в котором клиентские приложения будут динамически загружать и выполнять свободные фрагменты XAML (и некоторый связанный код IronPython). Клиент будет использовать пользовательскую службу WCF (и некоторое локальное кэширование) для извлечения XAML, вспомогательных сценариев и связанных ресурсов (значки, изображения и т. Д.).

Я хотел бы зарегистрировать собственный протокол / схему URI, чтобы разработчикам динамических пакетов было проще ссылаться на их ресурсы, например:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>

                <ResourceDictionary Source="custom://MyPackage/Icons.xaml"  />
                <ResourceDictionary Source="custom://MyPackage/Styles.xaml" />
                <!--                        ^^^^^^                         -->

            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
</UserControl>

Насколько я могу судить, я могу получить пользовательский UriParser и зарегистрировать его , но это только полдела. Остальная работа заключается в предоставлении любого компонента, необходимого для разрешения пользовательского URI и получения необходимого содержимого.

Можно ли предоставить или переопределить функциональность в WPF, чтобы он мог вызывать мою службу пользовательских данных при обнаружении одного из моих пользовательских URI? Или, если это невозможно, есть ли альтернатива?

Ответы [ 2 ]

4 голосов
/ 23 октября 2011

Насколько я понимаю, вам нужно создать класс, производный от WebRequest, и зарегистрировать его с WebRequest.RegisterPrefix.

0 голосов
/ 23 октября 2011

В качестве альтернативы мне интересно, не могли бы вы создать новый класс, который наследуется от ResourceDictionary (поскольку это не sealed) и предоставить определение new для Source. Это позволит вам перехватить значение, установленное на Source, и запустить его на свой пользовательский UriParser. Это также позволит вам легко обновить ResourceDictionary с результатами.

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