Ich verwende Teleriks RadControls für WPF mit impliziten Styling. Der folgende Stil ist in Themes/Windows8/Telerik.Windows.Controls.RibbonView.xaml
definiert:Stil basierend auf StaticResource zuvor definiert wurde zur Laufzeit nicht gefunden
<Style TargetType="telerikRibbonView:RadRibbonView" x:Key="RadRibbonViewStyle">
...
</Style>
Meine eigenen Stile und die auch keine Telerik erhalten, wie dies in der Versammlung Lib.Windows.Controls
im Ordner Themes
verschmolzen:
<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>
Und in TelerikCustomizations.xaml
definiere ich die folgende (leer, zu Testzwecken) style:
<Style x:Key="MyThemeRadRibbonViewStyle" TargetType="{x:Type telerik:RadRibbonView}" BasedOn="{StaticResource ResourceKey=RadRibbonViewStyle}" />
Das führt zur Laufzeit zur folgenden Ausnahme:
'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."}
Welche der folgenden Debugging-Anweisungen in MyView.xaml.cs führte mich:
public ShellView()
{
var baseStyle = FindResource("RadRibbonViewStyle");
var inherited = FindResource("MyThemeRadRibbonViewStyle");
InitializeComponent();
}
Jetzt ist die Sache: Die Ausnahme auf dem zweiten FindResource
Anruf ausgelöst wird. Mit der exakt gleichen Nachricht. Allerdings ist die RadRibbonViewStyle
eindeutig in der ersten Zeile des Konstruktors gefunden.
Wenn es darauf ankommt, wird das zusammengeführte Wörterbuch tatsächlich in App.xaml ein zweites Mal zusammengeführt.
Ich bin sicher, ich vermisse etwas offensichtlich, aber ich kann nicht herausfinden, was.
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
nicht den Konstruktor überschreiben. Tatsächlich macht es nichts.
aktualisieren
Wenn ich die Telerik Wörterbücher in TelerikCustomizations.xaml
statt sie noch in einem anderen Wörterbuch Verschmelzung (MyTheme.xaml
) fusionieren, verschwindet die Ausnahme.
Allerdings würde ich immer noch gerne wissen, warum das passiert.
Ich denke TelerikCustomizations.xaml nicht in der Lage ist RadRibbonViewStyle in BasedOn = "{Static ResourceKey = RadRibbonViewStyle}" – ethicallogics
Ja, aber warum zu finden? Designs/Windows8/Telerik.Windows.Controls.RibbonView.xaml wird direkt vor TelerikCustomizations.xaml zusammengeführt. – cguedel
Vermissen Sie nicht 'Themes' aus der Quelle des ersten Ressourcenwörterbuchs? –