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

Framework .NET Discussion :

Problème de template en XAML


Sujet :

Framework .NET

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut Problème de template en XAML
    Bonjour,

    Dans une interface en XAML, je fais appel à un template que j'ai défini dans un ressourceDictionnary. Si je l'appelle une fois, tout va bien, mais dès que j'ai deux boutons qui appellent le même template, l'application lance une exception de parsage du XAML au numéro de ligne et colonne correspondant à l'appel du Template dans le deuxième bouton.
    Le pire, c'est que quand je créer deux templates identiques en changeant juste le nom (ex en mettant un 2 à la fin) dans mon ressourceDictionnary et que mon deuxième bouton appelle le deuxième template, ça marche.
    J'aimerai vraiment comprendre parce que je vois pas l'intérêt de créer une feuille de style si je dois faire un copier coller à chaque fois que je veux l'utiliser.

    Voici le code du template :
    Code xaml : 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
     
    <ControlTemplate TargetType="{x:Type Button}" x:Key="btnreinit">
            <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                <Rectangle  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Name="bgrect" Fill="{StaticResource RectBrush}" />
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0,0,0,0"  RecognizesAccessKey="True" />
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="False">
                    <Setter TargetName="bgrect" Property="Effect" Value="{StaticResource pressedEffect}"/>
                    <Setter TargetName="bgrect"  Property="Fill" Value="{StaticResource PressedRectBrush}"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Content">
                        <Setter.Value>
                            <Image MaxWidth="25" MaxHeight="25" Source="res/reinit2.png" />
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="False">
                    <Setter Property="Content">
                        <Setter.Value>
                            <Image MaxWidth="25" MaxHeight="25" Source="res/reinit1.png" />
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

    et voici l'appel :

    Code xaml : 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
     
     
    <Grid.Resources>
            <ResourceDictionary x:Name="Style">
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary  Source="StyleBtn.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Grid.Resources>
    ...
    <StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button Name="btnreinitcltr" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="1" Template="{StaticResource btnreinit}" />
        </StackPanel>
    ....
     <StackPanel Grid.Row="2" Grid.Column="3" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button Name="btnreinitmerge" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="1" Template="{StaticResource btnreinit}" />
        </StackPanel>

    Si quelqu'un a une idée?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est à cause des images dans les setters de tes triggers. Ca fait que le même contrôle Image se retrouve dans 2 boutons à la fois, ce qui est interdit.

    Essaie de faire plutôt un truc comme ça :

    Code XAML : 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
    <ControlTemplate TargetType="{x:Type Button}" x:Key="btnreinit">
            <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                <Rectangle  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Name="bgrect" Fill="{StaticResource RectBrush}" />
                <Image Name="image" MaxWidth="25" MaxHeight="25" Source="res/reinit1.png" />
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="False">
                    <Setter TargetName="bgrect" Property="Effect" Value="{StaticResource pressedEffect}"/>
                    <Setter TargetName="bgrect"  Property="Fill" Value="{StaticResource PressedRectBrush}"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="image" Property="Source" Value="res/reinit2.png">
                    </Setter>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut
    Ok ça marche!

    Merci beaucoup parce que là j'étais un peu perdu (je débute en xaml). Je pensais que ça venait d'un problème de nom mais je voyais que bgrect, j'avais complètement oublié les images...

    Enfin merci beaucoup pour cette réponse rapide et efficace! Ce forum est toujours aussi bien fréquenté

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

Discussions similaires

  1. [POO] Problème de template
    Par T0xF0x dans le forum Langage
    Réponses: 4
    Dernier message: 05/07/2006, 13h36
  2. [xslt][Javascript] Problème de templates
    Par Dnallabar dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/11/2005, 11h55
  3. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  4. Réponses: 3
    Dernier message: 22/03/2005, 09h13

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