RecourceDictionaries и пользовательские конвертеры - PullRequest
1 голос
/ 11 января 2011

У меня есть приложение WPF, содержащее MainWindow, которое просто отображает MainUserControl, и оно также содержит App.xaml со словарями Merged:

<Application.Resources>
    <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources\Styles.xaml"/>
                <ResourceDictionary Source="Resources\DataTemplates.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</Application.Resources>

Тогда я решил использовать MainUserControl в другом проекте, где он должен отображаться в ElementHost. К сожалению, это не работает, потому что стили и шаблоны данных из словарей ресурсов не найдены. Я не знаю, как решить эту проблему, но решил, что могу переместить код ResourceDictionaries в ресурсы MainUserControl:

<UserControl.Resources>
    <ResourceDictionary>
        <!-- the same code --> 
    </ResourceDictionary>
</UserControl.Resources>

Это вызвало ошибку с моими конвертерами, которые я использовал в словарях ресурса - Невозможно создать неизвестный тип '{clrnamespace: MyApplication.Converters; assembly = MyApplication} LengthToStringConverter , Я попытался переместить конвертеры за пределы словарей ресурсов, добавив еще один ResourceDictionary с моими конвертерами:

        <ResourceDictionary>
            <con:LengthToStringConverter x:Key="textConverter"/>
            <con:DateToTextConverter x:Key="dateConverter"/>
        </ResourceDictionary>

Это также вызвало исключение xaml (предоставьте значение для 'System.Windows.StaticResourceExtension', вызвавшее исключение.).

Итак, я ищу способ решения проблемы с конвертерами, которую невозможно найти в словарях ресурсов, или другой способ решения проблемы с использованием класса MainUserControl в другом проекте (он вообще не может найти ресурсы, возможно, есть способ их указать?).

1 Ответ

1 голос
/ 11 января 2011

Кажется, вы определили свои ресурсы в своем основном проекте. Это означает, что вы можете использовать ресурсы только в рамках этого проекта. Если вы затем используете свой MainUserControl в другом проекте, этот проект не знает основной проект и его ресурсы - вот почему произошла ошибка.

Если вы хотите повторно использовать свои ресурсы в другом приложении / проекте, вы должны переместить все свои ресурсы в отдельную базовую сборку / проект. Затем вы можете ссылаться на этот базовый проект из обоих приложений / проектов, чтобы ресурсы можно было загружать из обоих приложений.

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