2010-05-24 6 views
0

Est-ce que quelqu'un a réussi à incorporer un Silverlight ControlTemplate dans une application F # Silverlight? J'essaie d'ajouter des transitions à l'élément Navgiation.Frame et de suivre avec un exemple C#: http://www.davidpoll.com/2009/07/19/silverlight-3-navigation-adding-transitions-to-the-frame-controlSilverlight ControlTemplate et F #

La source téléchargée utilise l'option MSBUILD: Compiler sur le modèle XAML et le fichier est inclus en tant que «Page». .. ILDASM n'affiche aucun objet créé pour le XAML;

Dans mon projet, j'incldued comme une « ressource » (comme je l'ai fait pour mes pages) et référencées dans 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> 

le TransitioningFrame.xaml est la suivante:

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

Ma page d'objets charger tous leurs XAML respectifs avec le code follwoing:

type Page1() as this = 
    inherit UriUserControl("/FSSilverlightApp;component/Page1.xaml") 
    do 
     Application.LoadComponent(this, base.uri) 

et somew ici app démarrage:

let p1 = new Page1() 

Je DONOT une pièce comparable pour le ControlTemplate - bien que j'espérais l'objet d'application et App.xaml tirerais dans magie (en aparté, le recours à cette magie a mis en place une application 100% f # silverlight plutôt difficile - comme presque tous les articles publiés que je trouve sont basés sur des magiciens et des raccourcis - très peu sur la plomberie acual - ugh).

la XAML page fait référence à la commande via:

<StackPanel Grid.Row="3" Grid.Column="2" Name="mainPanel"> 
    <navigation:Frame Name="contentFrame" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Template="{StaticResource TransitioningFrame}"/> 
</StackPanel> 

Tout conseil ou thougts sur le sujet sont appréciés.


Par brians commentaire, j'ai étudié les diagnostics de commande MSBuild et il ne ressemble pas à n'anythining autre que l'inclure comme une ressource:

Génération fichier .resources: « obj \ Debug \ TransitioningNavigation.g.resources '... (TaskId: 14) Lecture du fichier de ressources: ' C: \ Users \ todd.brown \ Desktop \ TransitioningNavigation \ TransitioningNavigation \ Assets \ Styles.xaml '... (TaskId : 14) L'ID de ressource est 'assets/styles.xaml'. (TaskId: 14)
Lecture du fichier de ressources: 'C: \ Users \ todd.brown \ Desktop \ TransitioningNavigation \ TransitioningNavigation \ Assets \ TransitioningFrame.xaml' ... (TaskId: 14) ID de ressource est « actifs/transitioningframe.xaml '. (TaskId: 14)


Eh bien une chose intéressante est que si je renomme la référence au inide xaml ContentTemplate du App.xaml - l'application charge deosn't et renvoie une erreur - donc je suppose que la page est référencée et chargée correctement.à-dire cela est mauvais

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

Répondre

0

Il peut être utile d'aller à la ligne de commande, et exécutez

msbuild /t:clean 
msbuild /v:diag > diagnostics.txt 

et inspecter le journal de diagnostic pour savoir « ce que le Compile de ce fichier XAML (avec le ResourceDictionary) fait sous le capot ». Cela peut être suggestif de ce qu'il faut faire pour F #.

+0

pas au courant de cette fonctionnalité ... bonne -thx suggestion. Bien que je me demande si l'interface utilisateur devrait coder la transition à la main ou quelle est la technique préférée. On dirait que le jsut de TransitioningContentControl envoie environ trois transitions gratuitement. et aucun d'eux ne semble trop complexe. – akaphenom

0

Eh bien, en fait j'écrit ControlTemplates à WPF 4.0, ce qui devrait à peu de travail pour Silverlight aussi, vérifier les messages ci-dessous et la source git-centre que je l'ai mentionné,

http://fadsworld.wordpress.com/2011/03/05/f-wpf-component-development/

Vous devriez à peu près l'idée de la façon de déclarer les ressources, les utiliser avec des modèles de contrôle et aussi charger des modèles de contrôle à l'intérieur d'un contrôle personnalisé. BLEND a également travaillé de cette manière.

Faites-moi savoir si vous avez besoin d'aide.

Merci, Fahad