Utilizzo RadControls di Telerik per WPF con stile implicito. Il seguente stile è definito in Themes/Windows8/Telerik.Windows.Controls.RibbonView.xaml
:Lo stile basato su StaticResource precedentemente definito non si trova in fase di esecuzione
<Style TargetType="telerikRibbonView:RadRibbonView" x:Key="RadRibbonViewStyle">
...
</Style>
miei propri stili e quelli di default Telerik ottenere fuse come questo nell'assemblea Lib.Windows.Controls
nella cartella 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>
E in TelerikCustomizations.xaml
io definisco il seguente (vuoto, per scopi di test) stile:
<Style x:Key="MyThemeRadRibbonViewStyle" TargetType="{x:Type telerik:RadRibbonView}" BasedOn="{StaticResource ResourceKey=RadRibbonViewStyle}" />
Quali risultati nella seguente eccezione in fase di esecuzione:
'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."}
che mi ha portato ai seguenti dichiarazioni di debug in MyView.xaml.cs:
public ShellView()
{
var baseStyle = FindResource("RadRibbonViewStyle");
var inherited = FindResource("MyThemeRadRibbonViewStyle");
InitializeComponent();
}
Ora la cosa è: L'eccezione viene generata sul secondo FindResource
chiamata. Con lo stesso identico messaggio. Tuttavia, lo RadRibbonViewStyle
si trova chiaramente nella prima riga del costruttore.
Se è importante, il dizionario unito viene effettivamente unito in App.xaml una seconda volta.
Sono sicuro che mi manca qualcosa di ovvio, ma non riesco a capire cosa.
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
non sovrascrive il costruttore. In realtà non fa nulla.
Aggiornamento
Se unire i dizionari Telerik in TelerikCustomizations.xaml
invece di fondere in un altro dizionario (MyTheme.xaml
), l'eccezione scompare.
Tuttavia, mi piacerebbe ancora sapere perché questo accade.
penso TelerikCustomizations.xaml non è in grado di trovare RadRibbonViewStyle in BasedOn = "{StaticResource ResourceKey = RadRibbonViewStyle}" – ethicallogics
Sì, ma perché? Temi/Windows8/Telerik.Windows.Controls.RibbonView.xaml vengono uniti a destra prima di TelerikCustomizations.xaml. – cguedel
Non ti mancano i 'temi 'dall'origine del primo dizionario delle risorse? –