我对此束手无策。我花了无数个小时试图弄清楚这一点,但没有这样的运气。
问题的简短说明
在我的自定义控件类中,当我检查 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>
我的控制有效!所以除了路径,没有什么不同。但这不起作用,因为我不想在主应用程序中存储我的库所依赖的字典文件。
请帮忙。