窗口样式在设计器中不可见

时间:2019-05-12 17:00:32

标签: c# wpf window window-style

我创建了一个窗口样式(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 :(得分:0)

有时您会发现,尽管在app.xaml中放入了尝试加载内容的任何内容,但在设计时并未加载控件库中的资源。

MS为Blend创建了一种机制,由于它是Blend设计器,因此可以在Visual Studio中使用。

这使用一个名为DesignTimeResources.xaml的“特殊”资源字典

这仅在设计时使用。

在问题exe项目的属性中添加一个。

确切的名字。

将所有合并内容放入其中。

例如,这是我的MapEditor项目中的一个项目,该项目使用了UILib的大量资源。 UILib是一个控件库,其中包含各种UI内容。

    <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。

您的样式现在应该适用。