【发布时间】:2014-11-20 17:29:56
【问题描述】:
我在尝试在我正在开发的 WPF 应用程序中使用合并的 ResourceDictionaries 解决问题时遇到了这个奇怪的问题。
我在外部 DLL(“通用”)中定义了自定义控件(TextButton、MenuButton)和资源(颜色、画笔、控件样式和自定义控件模板)。在另一个库中,我有一个使用这些样式的用户控件(“pluginA”)。
只要我使用标准 WPF 控件(TextBlock、Button、Grid 等),我就可以毫无问题地应用“通用”dll 中的样式。设计师会选择风格并正确应用。
如果我将其中一个自定义控件 (TextButton) 放入“pluginA”中的用户控件中 - 设计人员会找到 自定义控件,但无法将样式的类型解析为被应用(类型引用找不到名为 '{clr-namespace:Common}TextButton' 的类型)。
我的用户控件中的 xmlns 声明如下所示:
<UserControl x:Class="PluginA.Views.LeftBarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:core="clr-namespace:Common.Core;assembly=Common"
xmlns:common="clr-namespace:Common;assembly=Common"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="300">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<core:SharedResourceDictionary Source="/Common;component/Resources/DefaultTheme/DefaultTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
使用此定义,设计器不会应用任何样式 - 但它可以在运行时工作。很好,但不是很有帮助,因为我不想运行应用程序来查看小调整是否生效。
所以我尝试了这个:
<core:SharedResourceDictionary Source="pack://application:,,,/Common;component/Resources/DefaultTheme/DefaultTheme.xaml" />
但这并没有改变任何东西(设计师仍然找不到资源)。在更改代码的过程中,我得到了这个:
<core:SharedResourceDictionary Source="pack:/Common;component/Resources/DefaultTheme/DefaultTheme.xaml" />
现在设计者很高兴并且可以找到资源 - 运行时很高兴并显示资源,但我找不到任何关于这是有效 PACK URI 的描述......谁能解释为什么这会起作用?
【问题讨论】:
-
您是否尝试在拥有有效的包 uri 时进行重建?
-
对不起 - 被拖到其他事情上了。明天我上班的时候试试看。
-
我把它改回了一个有效的包 URI,效果很好。从那时到现在,我确实将更新 4 安装到 VS2013,也许有一些问题得到修复,导致它再次按预期工作......?谢谢你的帮助!! :D
标签: wpf xaml resourcedictionary