我正在使用带有隐式样式的 Telerik 的 RadControls for WPF。以下样式定义在Themes/Windows8/Telerik.Windows.Controls.RibbonView.xaml
:
<Style TargetType="telerikRibbonView:RadRibbonView" x:Key="RadRibbonViewStyle">
...
</Style>
Lib.Windows.Controls
我自己的样式和 Telerik 默认样式在文件夹中的程序集中像这样合并Themes
:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Windows8/Telerik.Windows.Controls.RibbonView.xaml" />
<ResourceDictionary Source="MyTheme/TelerikCustomizations.xaml" />
<ResourceDictionary>
<!-- avoid optimization -->
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
在TelerikCustomizations.xaml
我定义以下(空的,用于测试目的)样式:
<Style x:Key="MyThemeRadRibbonViewStyle" TargetType="{x:Type telerik:RadRibbonView}" BasedOn="{StaticResource ResourceKey=RadRibbonViewStyle}" />
这会在运行时导致以下异常:
'Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.' Line number '4' and line position '42'.
{"Cannot find resource named 'RadRibbonViewStyle'. Resource names are case sensitive."}
这导致我在 MyView.xaml.cs 中使用以下调试语句:
public ShellView()
{
var baseStyle = FindResource("RadRibbonViewStyle");
var inherited = FindResource("MyThemeRadRibbonViewStyle");
InitializeComponent();
}
现在的事情是:在第二次FindResource
调用时抛出异常。带有完全相同的消息。但是RadRibbonViewStyle
,在构造函数的第一行中可以清楚地找到。
如果重要的话,合并的字典实际上会第二次合并到 App.xaml 中。
我确定我遗漏了一些明显的东西,但我不知道是什么。
应用程序.xaml
<Application x:Class="TestClient.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Views/ShellView.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Lib.Windows.Controls;component/Themes/MyTheme.xaml" />
<ResourceDictionary>
<!-- added to avoid optimization -->
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
App.xaml.cs
不会覆盖构造函数。事实上它什么也没做。
更新
如果我合并 Telerik 字典TelerikCustomizations.xaml
而不是将它们合并到另一个字典 ( MyTheme.xaml
) 中,异常就会消失。
但是,我仍然想知道为什么会发生这种情况。