我在尝试使用合并的ResourceDictionaries在WPF应用程序中解决问题时遇到了这种奇怪现象。WPF pack:/ [assemblyName]; component/... vs pack:// application:,,,/[assemblyName]; component/...?
我在外部DLL(“公用”)中定义了自定义控件(TextButton,MenuButton)和资源(颜色,画笔,控件样式和自定义控件模板)。在另一个库中,我有一个使用这些样式的用户控件(“pluginA”)。我只能使用标准的WPF控件(TextBlock,Button,Grid等) - 我可以从“common”dll应用样式,没有任何问题。设计师会选择风格并正确应用。
如果我在自定义控件(TEXT按钮)进入“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 **时,您是否尝试重建? – 2014-11-20 18:32:12
对不起 - 被拉到其他东西。我明天开始工作时会试一试。 – 2015-02-02 04:40:12
我将其更改回有效的包URI,并且效果很好。我在当时和现在之间安装了Update 4到VS2013,或许有些事情已经修复,导致它再次按预期工作......?谢谢你的帮助!! :d – 2015-02-02 22:41:46