【问题标题】:Window style not visible in designer窗口样式在设计器中不可见
【发布时间】:2019-05-12 17:00:32
【问题描述】:

我创建了一个 Window 样式 (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

它的外观:

它在设计器内部的外观:

【问题讨论】:

  • 您是否尝试从 DynamicResource 更改为 StaticResource?
  • 是的,在设计器中它告诉我与测试 1 相同的错误并且它不再运行 - 异常:找不到名为“HVE_Window”的资源。
  • @Sascha:你使用的是什么版本的 Visual Studio?
  • @Jackdaw Visual Studio 社区 2019 16.0.2
  • @Sascha:你能多放一点源来模拟这个问题吗?实际上,这种情况对我有用...

标签: c# wpf window window-style


【解决方案1】:

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

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

您的样式现在应该应用了。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2013-06-14
  • 2011-04-15
相关资源
最近更新 更多