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 :

Problème de résolution de namespace http dans XamlReader


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 28
    Par défaut Problème de résolution de namespace http dans XamlReader
    Bonjour,

    Je lis à la volée des XAML contenant des style à appliquer à mes composants.
    Mes composants sont situées dans une librairie où j'ai défini dans AssemblyInfo.cs ceci :

    // Les informations de namespace XML
    [assembly: XmlnsDefinition("http://schemas.monapplication.com", "MyLibrary")]

    et le souci c'est que lorsque je charge avec un XamlReader mon fichier XAML contenant des composants préfixés par le namespace maLib:MonComposant1 (avec xmlns:maLib="http://schemas.monapplication.com", il me dit qu'il n'existe pas de MonComposant1 dans http://schemas.monapplication.com.

    Or si je l'ajoute dans le Xaml de ma window, ça fonctionne très bien, il le trouve.

    Avez-vous une idée ?

    Merci.

    Tito

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    oui tu as la possibilité de rajouter des configuration style avec le ParserContext
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
               string assName = Assembly.GetExecutingAssembly().GetName().Name;
                byte[] byteArray = Encoding.ASCII.GetBytes( str );
                MemoryStream xmlStream = new MemoryStream(byteArray);
                ParserContext pc = new ParserContext();
                pc.XamlTypeMapper = new XamlTypeMapper(new string[] { assName });
                pc.XmlnsDictionary.Add( "av", "http://schemas.microsoft.com/winfx/2006/xaml/presentation" );
                pc.XmlnsDictionary.Add( "x", "http://schemas.microsoft.com/winfx/2006/xaml" );
                pc.XmlnsDictionary.Add( "sys", "clr-namespace:System;assembly=mscorlib" );
     
                UserControl obj = XamlReader.Load(xmlStream, pc) as UserControl;
                this.grid.Children.Add(obj);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 28
    Par défaut
    Merci ikeas !

    Par contre est-ce que tu sais comment changer le nom des namespaces lors de la sérialisation avec XamlWriter ?

    Je m'explique : quand je fais XamlWriter.Save(myObject, myXmlWriter), il me sauvegarde bien mon objet dans un fichier .xaml, mais il met des namespaces de la forme :
    xmlns:assembly="http://schemas.maLibrary.com"
    xmlns:assembly0="http://schemas.maLibrary2.com"

    Alors que moi je voudrais avoir des noms plus explicites à la place de "assembly" et "assembly0" dans mon exemple.

    Une idée ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    ca depand en fait de ce que tu serialise
    fait voir le résultat de ta sérialisation

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 28
    Par défaut
    Voilà ce que j'obtiens avec XamlWriter de mon ResourceDictionary :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    	xmlns:assembly="http://schemas.monAppli.com/myLibrary/2009" 
    	xmlns:assembly0="http://schemas.monAppli.com/myLibrary2/2009" 
    	xmlns:s="clr-namespace:System;assembly=mscorlib">
      <DataTemplate DataType="{x:Type assembly:ImageViewModel}" x:Key="{DataTemplateKey DataType={x:Type assembly:ImageViewModel}}">
        <Image Source="{Binding Path=Content}" />
      </DataTemplate>
      <Style TargetType="assembly:MainView">
        <Style.Resources>
          <ResourceDictionary />
        </Style.Resources>
        <Setter Property="Control.Template">
          <Setter.Value>
            <ControlTemplate>
              <assembly0:View Name="PART_ItemsControl">
                <assembly0:View.ItemContainerStyle>
                  <Style TargetType="assembly0:ViewItem">
                    <Style.Resources>
                      <ResourceDictionary />
                    </Style.Resources>
                    <Setter Property="FrameworkElement.Width">
                      <Setter.Value>
                        <s:Double>400</s:Double>
                      </Setter.Value>
                    </Setter>
                    <Setter Property="FrameworkElement.Height">
                      <Setter.Value>
                        <s:Double>300</s:Double>
                      </Setter.Value>
                    </Setter>
                  </Style>
                </assembly0:View.ItemContainerStyle>
              </assembly0:View>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </ResourceDictionary>
    Tu vois mon souci ? j'aimerai changer les noms des namespaces "assembly" en "myLibrary" et "assembly0" en "myLibrary2"

Discussions similaires

  1. Probléme de résolution de nom dans un domaine 2008 R2
    Par mathwork dans le forum Administration
    Réponses: 0
    Dernier message: 06/08/2014, 14h12
  2. Réponses: 9
    Dernier message: 11/07/2012, 18h01
  3. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24
  4. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

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