私は暗黙のスタイリングでTelerikのRadControls for WPFを使用しています。前に定義したStaticResourceに基づくスタイルは実行時に見つかりません
<Style TargetType="telerikRibbonView:RadRibbonView" x:Key="RadRibbonViewStyle">
...
</Style>
私自身のスタイルをしてTelerikデフォルトのものがフォルダThemes
に組み立てLib.Windows.Controls
で、次のようにマージされます:次のスタイルはThemes/Windows8/Telerik.Windows.Controls.RibbonView.xaml
で定義されている
<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:
<Style x:Key="MyThemeRadRibbonViewStyle" TargetType="{x:Type telerik:RadRibbonView}" BasedOn="{StaticResource ResourceKey=RadRibbonViewStyle}" />
実行時に次の例外が発生します。
MyView.xaml.csで、次のデバッグ文に私を導いた'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."}
:
public ShellView()
{
var baseStyle = FindResource("RadRibbonViewStyle");
var inherited = FindResource("MyThemeRadRibbonViewStyle");
InitializeComponent();
}
今の事は次のとおりです。例外は、第二FindResource
呼び出しでスローされます。まったく同じメッセージです。しかし、RadRibbonViewStyle
はコンストラクタの最初の行にはっきりと見られます。
実際には、マージされた辞書は実際にはApp.xamlで2度目にマージされます。
私は明らかに何かが不足していると確信していますが、何が分かりません。
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
は、コンストラクタを上書きしません。実際には何もしません。私はまだ別の辞書(MyTheme.xaml
)でそれらをマージするのではなく、TelerikCustomizations.xaml
でTelerik辞書をマージした場合
更新
、例外が消えます。
しかし、私はまだこれがどうして起こるのか知りたいです。
私は "{StaticResourceたResourceKey = RadRibbonViewStyle}" – ethicallogics
うん、なぜ= TelerikCustomizations.xamlがBASEDONでRadRibbonViewStyleを見つけることができないと思いますか? Themes/Windows8/Telerik.Windows.Controls.RibbonView.xamlは、TelerikCustomizations.xamlの直前にマージされます。 – cguedel
最初のリソース辞書のソースから 'Themes'が欠けていませんか? –