Tapirro Ответов: 1

WPF как библиотека - проблема "определения приложения"


Привет,

У меня есть небольшая проблема с приложением WPF в качестве библиотеки. Изначально он был разработан как автономное приложение, но позже мы решили использовать его в качестве плагина. Я поискал в Гугле и теперь я знаю, что я должен использовать библиотека пользовательских элементов управления WPF или библиотека пользовательских элементов управления WPF. Мой проект-это приложение WPF, и после изменения типа вывода на библиотеку классов VS выдает мне следующие предупреждения:

1. файл проекта Библиотеки не может указать элемент ApplicationDefinition.
2. Файл проекта содержит значение свойства, которое не является допустимым.

Google сказал мне изменить параметры сборки App.xaml на страницу, и здесь я получаю еще одну проблему. Я использую внешний стиль, и после запуска я получаю исключения в каждом месте с "{StaticResource Foreground}". Я новичок в WPF, поэтому буду признателен за любую помощь.

Pheonyx

Мой совет состоял бы в том, чтобы начать с пустого проекта, а затем скопировать окна WPF/элементы управления/классы и т. д. В Новый проект. Я считаю, что это проще, чем пытаться изменить тип проекта, как только вы его сделали.

Member 12395765

огромное спасибо !

1 Ответов

Рейтинг:
8

db7uk

Вы не должны иметь файл app.xaml в библиотеке пользовательского элемента управления. избавься от этого.

Проблема заключается в том, что библиотека пользовательского элемента управления действительно предназначена для UIelements, которые эффективно сообщают, какие ресурсы использовать приложению, ссылающемуся на библиотеку пользовательского элемента управления. Обходной путь состоит в том, чтобы создать словарь ресурсов с содержащимися в нем ресурсами (и / или ссылками), а затем на элементах управления пользователя ссылаться на этот ресурс в разделе usercontrol.resources.

т. е.(обратите внимание, что это из проекта Silverlight, но принципы те же самые)

словарь ресурсов

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="TextBlockWithMargin" TargetType="TextBlock">
        <Setter Property="Margin" Value="10" />
    </Style>


Пользовательский элемент управления
<UserControl x:Class="x.x.Test"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d"

    d:DesignHeight="300" d:DesignWidth="400">
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/ProjectA;component/MyResourceDictionary.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" removed="White">

    </Grid>
</UserControl>


Обычно ресурсы задаются в приложении app.xaml. Вы упомянули, что приложение было изменено на usercontrol lib. Так где же на это будут ссылаться? Вы хотите сказать, что хотите запустить библиотеку usercontrol самостоятельно?

Чтобы обойти ошибки времени компиляции, вы можете использовать {DynamicResource Foreground}. Динамический ресурс не будет установлен до времени выполнения, поэтому компиляции должны работать. Однако у вас все равно будут проблемы, если usercontrol не знает или не может найти правильный ресурс.

Если вы предоставите немного больше информации о том, что вы делаете или хотите достичь, то я, вероятно, смогу помочь вам в дальнейшем.

спасибо


Tapirro

Я скопировал вашу часть из пользовательского элемента управления в мое главное окно xaml, используя мой источник словаря ресурсов (взятый из app.xaml). Как вы уже сказали, я также удалил файл App.xaml, и теперь все работает отлично. Спасибо!