我的绳索结束了。我花了无数个小时试图解决这个问题而没有这样的运气。
问题的简短说明
在我的自定义控件类中,当我检查Application.Current.Resources [“key”]时,我返回null。这个“Key”样式位于本地字典中,该字典应该由我的Control Library的themes / generic.xaml资源与Application.Current.Resources合并。
如何在SilverLight Control Library的themes / generic.xaml中引用/确认对MergedDictionary的引用。
这是否可能,或者我是否考虑合并资源如何被合并完全错误?
请帮忙。提前谢谢。
问题的长解释
我有一个带有Controls文件夹的Silverlight控件库和一个Themes文件夹。在Themes文件夹中我有generic.xaml。内容:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/SilverLightLib;component/Themes/EnhancedLabelDict.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
在Themes文件夹中,我有EnhancedLabelDict.xaml。内容:
<Style x:Key="ReadOnlyTextBox" TargetType="TextBox">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="#FFFFFFFF"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="BorderBrush">
<!-- A lot more code -->
</Style>
这两个文件构建操作都设置为Page。
现在我不知道generic.xaml是否正在加载我的资源。我能告诉的唯一方法是在两者之间放置一些未格式化的文本。这会导致错误。
如果我使用不正确的路径到我的ResourceDictionary,我收到一个运行时错误 - '无法分配给属性'System.Windows.ResourceDictionary.Source'
在我的Controls文件夹中,我有EnhancedLabel.cs,它扩展了ContentControl。在它的构造函数中,我创建了一个新的TextBox,并像这样分配它的样式:
Style style = Application.Current.Resources["ReadOnlyTextBox"] as Style;
this.textBox.Style = style;
我在App.xaml和我的EnhancedLabelDict.xaml中都有这种风格,它位于我的库中。当我在App.xaml中注释掉Style时,找不到'ReadOnlyTextBox'样式(null)。找不到它,它被发现了。
我不明白为什么我不能在我的EnhancedLabel.cs中引用我的风格。
如果我使用EnhancedLabelDict.xaml,请将其添加到主Application中的Resources文件夹内的Themes文件夹中。如果我然后将以下内容添加到我的App.xaml:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/SilverLightPOC;component/Resources/Themes/EnhancedLabelDict.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
我的控制工作!除了路径之外,没有什么不同。但这不起作用,因为我不想在主应用程序中存储我的库所依赖的Dictionary文件。
请帮忙。
答案 0 :(得分:0)
当嵌套字典深度超过3级时,Silverlight中存在优化错误 - 除非您使用workarround,否则不会加载它们。