我创建了一个窗口样式(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
应如何显示:
在设计器中的外观:
答案 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。
您的样式现在应该适用。