IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Charger le XAML de façon dynamique


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut Charger le XAML de façon dynamique
    Bonjour,

    J'essaie de charger le contenu XAML de mon interface de façon dynamique.
    Pour l'instant, cela fonctionne...avec des fichiers XAML chargés en 'Resources' dans mon projet.
    Ce que je voudrais, c'est pouvoir charger ces fichiers XAML à partir d'un dossier présent sur le PC utilisateur (disons le "Bureau")

    Comment dois-je SVP procéder...je n'y arrive pas dès que le fichier n'est plus en resource?

    Voici le fichier XAML d'exemple (celui qui doit être chargé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Border Width="385" Height="385" Margin="0,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" CornerRadius="8" Background="#FF0085C8">
    </Grid>
    Le code XAML de l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    </Window>
    Le code VB.net de l'application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Class MainWindow
        Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Dim GridUri As New Uri("Resources\theme.xaml", UriKind.Relative)
            Dim sri As Windows.Resources.StreamResourceInfo = Application.GetResourceStream(GridUri)
            Dim xrdr As New System.Windows.Markup.XamlReader()
            Dim grd As Grid = CType(xrdr.LoadAsync(sri.Stream), Grid)
            Me.Content = grd
        End Sub
    End Class
    Merci pour votre aide!!

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser la classe XamlReader qui te permet de charger du XAML dynamiquement :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim loadedGrid = TryCast(System.Windows.Markup.XamlReader.Load(fs), Grid)

    L'objet fs étant un FileStream, et Grid étant le type contenu dans le fichier XAML que l'on charge dans fs.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Matt,

    Un grand merci pour ta réponse!
    Malheureusement une erreur est soulevée (à la 3ème ligne):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim GridUri As String = "theme.xaml"
    Dim fs As FileStream = New FileStream(GridUri, FileMode.Open, FileAccess.Read)
    Dim sri = TryCast(System.Windows.Markup.XamlReader.Load(fs), Grid)
    Me.Content = sri
    XAMLParseException: élement racine manquant!

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Peux-tu poster le contenu de ton fichier XAML STP ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Matt,
    Merci à nouveau pour ta réponse et l'aide que tu m'apportes!
    L'erreur vient de moi!
    Lorsque tu m'as donné le conseil d'utiliser un FileStream j'ai fait cette erreur en voulant tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fs As New FileStream("file.xaml", FileMode.Create, FileAccess.Write)
    J'ai créé un FileStream...en mode "Create"....du coup j'ai effacé le fichier tel qu'il existait jusqu'alors et l'ai remplacé par un document XAML vide.
    Je ne m'en suis pas rendu compte, et quand j'ai finalement adopté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fs As FileStream = New FileStream(GridUri, FileMode.Open, FileAccess.Read)
    j'ai cru que cela ne marchait pas..alors que cela marchait..mais que le fichier était vide!!

    Voici donc, pour ceux qui auront besoin de l'information un jour ou l'autre, le code correct:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Imports System.IO
    Class MainWindow
        Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Dim GridUri As String = "C:\Users\username\Desktop\theme.xaml"
            Dim fs As FileStream = New FileStream(GridUri, FileMode.Open, FileAccess.Read)
            Dim sri = TryCast(System.Windows.Markup.XamlReader.Load(fs), Grid)
            Me.Content = sri
        End Sub
    End Class
    Merci Matt !!!

    PS: peux-tu par hasard jeter un oeil sur un autre topic (qui est en sorte la suite de celui ci) sur http://www.developpez.net/forums/d13...iler-xaml-dll/...et me donner, là aussi, ton avis?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Jayme65 Voir le message
    Merci Matt !!!

    PS: peux-tu par hasard jeter un oeil sur un autre topic (qui est en sorte la suite de celui ci) sur http://www.developpez.net/forums/d13...iler-xaml-dll/...et me donner, là aussi, ton avis?
    De rien

    N'oublie pas de cliquer sur le bouton "Résolu". Je vais aller jeter un oeil à ton autre post.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/08/2006, 13h49
  2. Réponses: 5
    Dernier message: 29/01/2006, 22h17
  3. listbox ajustement de la taille de façon dynamique
    Par ana2sb dans le forum Access
    Réponses: 3
    Dernier message: 14/10/2005, 17h11
  4. Nommer un objet de façon dynamique
    Par jflebegue dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/09/2005, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo