1

我对此束手无策。我花了无数个小时试图弄清楚这一点,但没有这样的运气。

问题的简短说明

在我的自定义控件类中,当我检查 Application.Current.Resources["key"] 时,我返回 null。此“键”样式位于本地字典中,该字典应该由我的控件库的主题/generic.xaml 资源与 Application.Current.Resources 合并。

如何在 SilverLight 控件库的主题/generic.xaml 中引用/确认对 MergedDictionary 的引用。

这甚至可能吗,还是我对如何合并资源的想法是完全错误的?

请帮忙。提前致谢。

问题的详细解释

我有一个带有 Controls 文件夹和 Themes 文件夹的 Silverlight 控件库。在 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 文件夹中,我有扩展 ContentControl 的 EnhancedLabel.cs。在它的构造函数中,我创建了一个新的 TextBox 并分配它的样式,如下所示:

Style style = Application.Current.Resources["ReadOnlyTextBox"] as Style;
this.textBox.Style = style;

我在库中的 App.xaml 和 EnhancedLabelDict.xaml 中都有这种风格。当我注释掉 App.xaml 中的样式时,找不到“ReadOnlyTextBox”样式(空)。取消注释,就找到了。

我不明白为什么我不能从我的 EnhancedLabel.cs 中引用我的样式。

如果我使用 EnhancedLabelDict.xaml,请将其添加到主应用程序内 Resources 文件夹内的 Themes 文件夹中。如果我随后将以下内容添加到我的 App.xaml:

<ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/SilverLightPOC;component/Resources/Themes/EnhancedLabelDict.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

我的控制有效!所以除了路径,没有什么不同。但这不起作用,因为我不想在主应用程序中存储我的库所依赖的字典文件。

请帮忙。

4

1 回答 1

0

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

请参见 将合并词典添加到合并词典

于 2013-03-15T07:15:49.547 回答