Стиль окна не виден в дизайнере - PullRequest
0 голосов
/ 12 мая 2019

Я создал стиль окна (WPF) и добавил его в качестве dll в свой проект этот стиль показывается корректно, когда я запускаю программу, но не отображается в конструкторе.

Я уже гуглил, но ни одно из решений там не работает

Тест 1:

// Window //
Style="{DynamicResource HVE_Window}"

// Window.Resources //
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/GlobalHive.Styles;component/HiveWindow.xaml"/>
</ResourceDictionary.MergedDictionaries>

Результат:

Error: 'Window' TargetType doesn not match type of element 'WindowInstance'

-> But it runs and display correctly there

Тест 2:

// Window //
Style="{DynamicResource MyWindow}"

// Window.Resources //
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/GlobalHive.Styles;component/HiveWindow.xaml"/>
</ResourceDictionary.MergedDictionaries>

<Style x:Key="MyWindow" TargetType="{x:Type Window}" BasedOn="{StaticResource HVE_Window}" />

Результат:

No Error:
Still doesn't display in the designer, still shows up if i run the program

Тест 3:

Both versions but added to application resources

Как это должно выглядеть: running design

Как это выглядит внутри конструктора: designer design

1 Ответ

0 голосов
/ 14 мая 2019

Иногда можно обнаружить, что ресурсы из управляющей библиотеки не загружаются во время разработки, несмотря на то, что вы положили в app.xaml, чтобы попытаться загрузить вещи.

MS создала механизм для Blend, который вы можете использовать в visual studio, так как это конструктор Blend.

При этом используется «специальный» словарь ресурсов, называемый DesignTimeResources.xaml

Это будет использоваться только во время разработки.

Добавьте один в Свойства вашего проекта exe проблемы.

Именно с таким именем.

Поместите все свои слияния в это.

Например, это один из моих проектов в MapEditor, который использует многочисленные ресурсы UILib. UILib - это управляющая библиотека со всеми видами пользовательского интерфейса.

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:MapEditor">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary  Source="pack://application:,,,/UILib;component/Resources/Geometries.xaml"/>
            <ResourceDictionary  Source="pack://application:,,,/UILib;component/Resources/ControlTemplates.xaml"/>
            <ResourceDictionary  Source="pack://application:,,,/UILib;component/Resources/FontResources.xaml"/>
            <ResourceDictionary  Source="pack://application:,,,/UILib;component/Resources/UILibResources.xaml"/>
            <ResourceDictionary  Source="/Views/Drawing/Terrain/Resources/CityResources.xaml"/>
            <ResourceDictionary  Source="/Resources/MapEditorResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

Выгрузите ваш csproj (щелкните правой кнопкой мыши в обозревателе решений), отредактируйте его и найдите узел для этого словаря ресурсов.

Измените его на:

<Page Include="Properties\DesignTimeResources.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
  <ContainsDesignTimeResources>true</ContainsDesignTimeResources>
</Page>

Перезагрузите проект, закройте и снова откройте Visual Studio.

Ваши стили теперь должны применяться.

...