SilverLight控件库 - 无法通过Generic.xaml引用相对MergedDictionary

时间:2013-01-17 21:38:27

标签: c# silverlight xaml

我的绳索结束了。我花了无数个小时试图解决这个问题而没有这样的运气。

问题的简短说明

在我的自定义控件类中,当我检查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文件。

请帮忙。

1 个答案:

答案 0 :(得分:0)

当嵌套字典深度超过3级时,Silverlight中存在优化错误 - 除非您使用workarround,否则不会加载它们。

请参阅 Adding a Merged Dictionary to a Merged Dictionary