2008-11-03 2 views
0

J'ai créé un projet Silverlight qui produit [quelque chose] fichier .xap pour empaqueter quelques UserControls silverlight. Je voudrais manipuler ce fichier .xap grâce à l'utilisation de javascript dans le navigateur pour afficher et masquer les contrôles utilisateur basés sur les événements de script java.Est-il possible d'afficher/masquer UserControls dans un fichier Silverlight XAP à partir de JavaScript?

Est-ce possible?

Si oui, n'importe quel échantillon pourrait ou des liens vers la documentation seraient appréciés.

Merci à l'avance

Kevin

Répondre

0
+0

Merci Arron, mais à moins que je ne l'ai manqué, la documentation fournie était principalement axée sur l'interopérabilité entre SL & Javascript ... Je suis intéressé une fois que je reviens dans le monde géré, comment puis-je prendre un UserControl et le cacher , puis montrez-en un autre. L'affectation à la propriété RootVisual n'a aucun effet. – Kevin

1

Voici ma solution ... ne sais pas si c'est la façon "meilleures pratiques" ... commentaires ????

Dans la classe App dans mon application Silverlight J'ai le code suivant:

private Page _page = null; 
    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     _page = new Page(); 
     this.RootVisual = _page; 

     HtmlPage.RegisterScriptableObject("App", this); 
    } 

également à la classe App ajouter un [ScriptableMember] à appeler à partir de JavaScript

[ScriptableMember] 
    public void ShowTeamSearch(Guid ctxId, Guid teamId) 
    { 
     _page.ShowTeamSearcher(ctxId, teamId); 
    } 

La page class est la valeur par défaut créée dans le projet Silverlight Control, elle n'a pas d'interface utilisateur ou de logique, elle est simplement utilisée pour échanger les vues.

Login oLogin; 
    TeamSearcher oSearcher; 

    public Page() 
    { 
     InitializeComponent(); 
     oLogin = new Login(); 
     oSearcher = new TeamSearcher(); 

     oLogin.Visibility = Visibility; 
     this.LayoutRoot.Children.Add(oLogin); 
    } 

également une méthode est ajoutée pour afficher/cacher les points de vue ... cela pourrait/probablement obtenir plus avancé/robuste avec des animations etc ... mais cela montre l'idée de base:

public void ShowTeamSearcher(Guid ctxId, Guid teamId) 
    { 
     oSearcher.UserTeamId = teamId; 
     oSearcher.UserContextId = ctxId; 

     LayoutRoot.Children.Remove(oLogin); 
     LayoutRoot.Children.Add(oSearcher); 
    } 

Puis invoquer ceci dans le JavaScript après avoir assigné l'id de oXaml à l'instance de l'hôte silverlight.

var slControl = document.getElementById('oXaml'); 
    slControl.Content.App.ShowTeamSearch(sessionId, teamId); 

Cela semble fonctionner et n'est pas si mauvais qu'une solution, mais il pourrait y avoir quelque chose de mieux ... des pensées?