暗黙のスタイリングを使用して、Telerik の RadControls for WPF を使用しています。では、次のスタイルが定義されていThemes/Windows8/Telerik.Windows.Controls.RibbonView.xaml
ます。
<Style TargetType="telerikRibbonView:RadRibbonView" x:Key="RadRibbonViewStyle">
...
</Style>
私自身のスタイルと Telerik の既定のスタイルLib.Windows.Controls
は、フォルダー内のアセンブリで次のようにマージされます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
問題は次のとおりです。例外は 2 回目の呼び出しでスローされます。まったく同じメッセージで。ただし、RadRibbonViewStyle
コンストラクターの最初の行で明らかに見つかります。
問題がある場合は、マージされたディクショナリが実際に App.xaml に再度マージされます。
明らかな何かが欠けていると確信していますが、何がわかりません。
App.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
) にマージする代わりにマージすると、例外が消えます。
ただし、なぜこれが起こるのか知りたいです。