2010-05-24 4 views
0

Comment puis-je savoir (via le débogueur si les ressources de mon application sont chargées correctement). J'ai essayé (en f #)Comment déterminer si un ResourceDictionary est chargé correctement

type MyApp() as this = 
    inherit Application() 
     do Application.LoadComponent(this, new System.Uri("/FSSilverlightApp;component/App.xaml", System.UriKind.Relative)) 

    let cc = new ContentControl() 

    let mainGrid : Grid = loadXaml("MainWindow.xaml") 
    let siteTemplate : Grid = mainGrid 

    let txt : TextBlock = siteTemplate ? txt 

    do 
     this.Startup.Add(this.startup) 
     let mutable s = "Items: " 
     s <- s + this.Resources.Count.ToString() 

il retourne un compte de zéro. Bien que je suis assez sûr que l'application charge la ressource parce que si je change le chemin dans le App.xaml - j'obtiens des exceptions à l'exécution. D'autres re, extraits sont lavent:

Je les suivantes app.xaml

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      x:Class="Module1.MyApp"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrame.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

et modèle de contenu:

<

ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ControlTemplate x:Key="TransitioningFrame" TargetType="navigation:Frame"> 
     <Border Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
       VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
      <ContentPresenter Cursor="{TemplateBinding Cursor}" 
          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          Margin="{TemplateBinding Padding}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
          Content="{TemplateBinding Content}"/> 
     </Border> 
    </ControlTemplate> 
</ResourceDictionary> 

Répondre

1

Pour voir quels sont les dictionnaires fusionnés sont chargés, l'utilisation une fenêtre de surveillance du débogueur ou un code à regarder:

Application.Current.Resources.MergedDictionaries.Count 
Application.Current.Resources.MergedDictionaries[0].Count 
etc... 

Si votre dictionnaire de ressources ne semble pas être le chargement, il pourrait être un problème avec le chemin de la source que vous passez dans ...

<ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrame.xaml" /> 

Votre syntaxe semble correct pour un ensemble nommé FSSilverlightApp, et Pour un fichier TransitioningFrame.xaml à la racine du projet/assembly, assurez-vous que votre fichier XAML se trouve à cet emplacement.

Si vous chargez un dictionnaire de ressources à partir du même assembly, utilisez simplement le chemin relatif sans la syntaxe "assembly; component/". Je mets toujours mes dictionnaires de ressources dans un dossier actif (la convention de modèles Silverlight) et fait référence aux fichiers sans la barre oblique leadingh, comme dans ...

<ResourceDictionary Source="Assets/Styles.xaml" /> 

Bonne chance,
Jim McCurdy, YinYangMoney et face à Face Software

+0

Peu de support pour les dossiers dans l'application f # dans VS2010 rc1. Merci pour les pointeurs je vais vérifier cette propriété et voir si elle est en train de charger. – akaphenom

Questions connexes