2014-04-13 2 views
0

У меня есть класс XAML/cs (EditorWindow), который происходит из окна и реализует некоторые специальные функции. У меня также есть подкласс только в формате .cs, который происходит из EditorWindow (открытый класс DetailedEditorWindow: EditorWindow).Расширение окна WPF в коде между проектами

Если оба они находятся в одном проекте, я могу просто открыть DetailEditorWindow (это не имеет значения, если они находятся в разных пространствах имен), но если я перемещу файл DetailEditorWindow в другой проект, который ссылается на EditorWindow, я получаю ресурс отсутствует SystemException, говоря, что он пропускает EditorWindow.xaml.

Почему это и как я могу исправить эту ошибку?

Спасибо заранее, JasonX

ответ

1

Ну это происходит потому, что EditorWindow частичный класс и не может работать только с .cs он нужен код XAML, чтобы функционировать. Когда вы добавляете DetailEditorWindow во внешнюю сборку и создаете экземпляр, он также вызывает конструктор EditorWindow. Но это попытается найти файл XAML, который внутренне ссылается на локальный ресурс Uri. Этот Uri не может быть разрешен в вашем проекте seccond. Я не думаю, что вы можете что-то сделать.

Вы можете видеть эту ссылку внутри .csproj файла:

<Compile Include="MainWindow.xaml.cs"> 
    <DependentUpon>MainWindow.xaml</DependentUpon> 
    <SubType>Code</SubType> 
</Compile> 

В этом случае вы можете создать окно без XAML и реализовать логику внутри. А затем наследуйте EditorWindow и DetailedEditorWindow от него. Однако вы не сможете ссылаться на элементы управления Xaml по их именам.

Другая возможность - использовать пользовательский стиль управления +, который будет реализовывать всю логику, а окно yous будет просто содержать этот элемент управления.

+0

Я боялся этого ... Я отправил аналогичный вопрос на несколько часов назад (теперь удален), и некоторые говорили об установках URI к абсолютным путям (от локального до ... глобального? Это было что-то о URI пакетах), но я не смог найти способ изменить ссылочный URI. Это возможно? – JasonX

+0

вы можете попробовать сыграть с вашим файлом csproj и установить полный uri вместо имени файла xaml. Но я почти уверен, что uri установлен во время компиляции. – Dmitry

+0

Ну ... стрелять. Общие методы имеют отношение к элементам управления XAML (перемещение, удаление и т. Д.), Поэтому я расширяю EditorWindow. Пробовал играть с проектом EditorWindow .csproj, без успеха. Нет ли другого способа, кроме перепроектирования большей части приложения? (Вопрос окунулся, там есть еще много кода). – JasonX