8

暗黙のスタイリングを使用して、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) にマージする代わりにマージすると、例外が消えます。

ただし、なぜこれが起こるのか知りたいです。

4

1 に答える 1