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 :

Inclure un control dans les Resource? Ou comment acceder a un controle de mon style


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Inclure un control dans les Resource? Ou comment acceder a un controle de mon style
    Bonjour je voudrais savoir si il est possible d'inclure un control dans une resource et m'en servir plus loin?

    En rouge le control en resourceEn vert essais d'afficher le control dans grid

    VS2008 me dit : Property 'Resources' does not support values of type 'System.Windows.Controls.Button'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Window x:Class="WpfApplication1.TestPascal.ControlDisposition1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:jmb="clr-namespace:JMB.Framework.WPF;assembly=JMB.Framework.WPF"
        Title="ControlDisposition" Height="300" Width="300" Loaded="Window_Loaded">
        <Window.Resources>
            <Button Name="Test" x:Key="btn">Test</Button>
        </Window.Resources>
        <Grid>
            <Control Resources="{StaticResource btn}"></Control>
        </Grid>
    </Window>
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Je pense qu'il faut te tourner vers les templates

    http://msdn.microsoft.com/en-us/magazine/cc163497.aspx

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par pascalwick Voir le message
    Bonjour je voudrais savoir si il est possible d'inclure un control dans une resource et m'en servir plus loin?
    Oui mais il faut en effet passer par les Templates

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Puis je avoir un exemple de ce qui pourrait fonctionner dans mon cas s'il vous plait. Et aussi simpliste que ce que j'ai fait.
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Mon vrai probleme est que je veux acceder aux controle qui est dans mon style
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <Window.Resources>
            <Style x:Key="TerritoryStyle" TargetType="{x:Type jmb:View}">
                <Setter x:Uid="monSetter" Property="Template">
                    <Setter.Value>
                        <ControlTemplate x:Uid="monTemplate" x:Name="monTemplate" TargetType="{x:Type jmb:View}">
                            <jmb:View x:Uid="monMainView" jmb:ViewItem.LabelPadding="5" jmb:ViewItem.LabelWidth="100" 
                                      jmb:ViewItem.LabelHorizontalContentAlignment="Right" 
                                      jmb:View.Territory="JMB_FR">
                                <Button Name="SwitchTerritory" Click="SwitchTerritory_Click">Switch</Button>
                                <jmb:View x:Uid="blocSaisieJMB_FR" Name="blocSaisieJMB_FR" jmb:ViewItem.LabelWidth="100" jmb:View.Territory="JMB_FR">
                                    <TextBox Name="txtNom1" Text="{Binding Path=Nom}" jmb:ViewItem.LabelContent="Nom" Width="100"></TextBox>                                <TextBox Name="txtPrenom1" Text="{Binding Path=Prenom}" jmb:ViewItem.LabelContent="Prénom" Width="100"></TextBox>
                                    <TextBox Name="txt2emePrenom" Text="{Binding Path=Prenom2}" jmb:ViewItem.LabelContent="2ème Prénom" Width="100"></TextBox>
                                    <TextBox Name="txt3emePrenom" Text="{Binding Path=Prenom3}" jmb:ViewItem.LabelContent="3ème Prénom" Width="100"></TextBox>
                                </jmb:View>
                                <jmb:View Name="blocSaisieJMB_ALL" jmb:View.Territory="JMB_ALL">
                                    <jmb:View.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <StackPanel Orientation="Vertical"/>
                                        </ItemsPanelTemplate>
                                    </jmb:View.ItemsPanel>
                                    <TextBox Name="txtNom2" Text="{Binding Path=Nom}" jmb:ViewItem.LabelContent="Nom :" Width="100"></TextBox>
                                    <TextBox Name="txtPrenom2" Text="{Binding Path=Prenom}" Width="100" ></TextBox>
    
                                </jmb:View>
                                <jmb:View Name="blocSaisieJMB_ESP" jmb:View.Territory="JMB_ESP">
                                    <jmb:View.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <StackPanel Orientation="Horizontal"/>
                                        </ItemsPanelTemplate>
                                    </jmb:View.ItemsPanel>
                                    <TextBox Name="txtPrenom3" jmb:ViewItem.LabelContent="Prénom :" Text="{Binding Path=Prenom}" Width="100"></TextBox>
                                    <TextBox Name="txtNom3" jmb:ViewItem.LabelContent="Nom :" Text="{Binding Path=Nom}" Width="100"></TextBox>
                                </jmb:View>
                            </jmb:View>
                            <ControlTemplate.Triggers>
                                <Trigger Property="jmb:View.Territory" Value="JMB_FR">
                                    <Setter TargetName="blocSaisieJMB_FR" Property="Visibility" Value="Visible"/>
                                    <Setter TargetName="blocSaisieJMB_ESP" Property="Visibility" Value="Collapsed"/>
                                    <Setter TargetName="blocSaisieJMB_ALL" Property="Visibility" Value="Collapsed"/>                                
                                </Trigger>
                                <Trigger Property="jmb:View.Territory" Value="JMB_ALL">
                                    <Setter TargetName="blocSaisieJMB_FR" Property="Visibility" Value="Collapsed"/>
                                    <Setter TargetName="blocSaisieJMB_ESP" Property="Visibility" Value="Collapsed"/>
                                    <Setter TargetName="blocSaisieJMB_ALL" Property="Visibility" Value="Visible"/>
                                </Trigger>
                                <Trigger Property="jmb:View.Territory" Value="JMB_ESP">
                                    <Setter TargetName="blocSaisieJMB_FR" Property="Visibility" Value="Collapsed"/>
                                    <Setter TargetName="blocSaisieJMB_ESP" Property="Visibility" Value="Visible"/>
                                    <Setter TargetName="blocSaisieJMB_ALL" Property="Visibility" Value="Collapsed"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>                    
                    </Setter.Value>
                </Setter>
            </Style>        
        </Window.Resources>
    J'appel mon style comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <jmb:View x:Name="mainView" Style="{StaticResource TerritoryStyle}" jmb:View.Territory="JMB_FR">        
     
        </jmb:View>
    </Window>
    En code behind je voudrait afficher la valeur de txtNom1 dans un messagebox dont la ligne est en rouge.

    Je ne sais pas comment y accéder. J'ai vus qu'il y avais des methode findName(string, object) et qu'il falait que je me creer des property pour mes control. Je ne sais pas comment m'y prendre pour affecter ces propriétée avec mon control.

    Pourais-je avoir un exemple du code behind. Juste pour le txtNom1, apres je me débrouillerais avec le reste des control. Car si ca marche pour 1 ca marche pour tous les controles.

    Merci et désolé pour le dérangement.
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Je suis actuellement dans la meme problématique que toi mais pour un controle ayant une collection d'objets (ItemTemplate)
    Je ne sais pas du tout comment faire et j'espere que je vais trouver la solution dans le bouquin que j'ai reçu ce midi.
    Maintenant si quelque à une idée à ce sujet, ça m'interesse grandement !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Je suis en train de faire le tour des forum sur le net. Si je vois une solution interessante a mon probleme je vais la poster.

    Je vais expliquer aussi ce que mon style fait rapidement pour que les EXPERTS XAML (Vous etes mes idoles ) ne perdent pas de temps a tous lire le code xaml qui est fonctionnel :


    Description du projets.
    On est en train de faire la refonte d'un systeme informatique qui a été développer il y a 20 ans et aujourd'hui la compagnie a décider de faire la refonte car ca coutais trop cher faire des modification aux systeme existant. Nous faisont cela sous le modele MVP ( Media View Presenter) et pour l'instant on fait un peu de recherche et développement.

    Description du style :
    Lorsque l'utilisateur (Programmeur a l'interne et utilisateur finale) va changer son territoire et la disposition des controle change et il y en a qui disparaisse.

    Ce que je ne sais pas faire c'est d'accéder a mon controle txtNom1 en code behind etant donné qu'il est encapsuler a quelque part dans mon style.

    Maintenant peut-etre que la solution que j'ai apporté n'a peut etre aucun bon sens mais c'est ce qui me semblait le mieux a faire. Je suis ouvert aux autre suggestion mais j'aimerais bien quand meme savoir comment accéder a mon txtNom1

    Encore une fois désolé pour le dérangement.
    Pascal Wick
    Programmeur-Analyste Sr.
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par pascalwick Voir le message
    modele MVP ( Media View Presenter)
    Model, pas Media

    Sinon, pour reprendre ton pb:

    En code behind je voudrait afficher la valeur de txtNom1 dans un messagebox dont la ligne est en rouge.
    Tu peux essayer d'utiliser la méthode FindName sur la propriété Template de ton contrôle mainView.

    Sinon, tu peux essayer le VisualTreeHelper.GetChild: http://msdn.microsoft.com/en-us/libr....getchild.aspx

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Voilà un exemple. La fenêtre:

    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
    <Window x:Class="WpfApplication18.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
     
        <Window.Resources>
            <Style TargetType="{x:Type Button}">
                <Style.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <StackPanel>
                                    <Label x:Name="PART_Label1"/>
                                </StackPanel>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style.Setters>
            </Style>
        </Window.Resources>
     
        <Grid>
            <Button x:Name="Button"/>
        </Grid>
    </Window>
    Le code-behind:
    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
     
    using System.Windows;
    using System.Windows.Controls;
     
    namespace WpfApplication18
    {
        /// <summary>
        /// Interaction logic for Window1.xaml
        /// </summary>
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
     
                Loaded += new RoutedEventHandler(Window1_Loaded);
            }
     
            void Window1_Loaded(object sender, RoutedEventArgs e)
            {
                Label label = this.Button.Template.FindName("PART_Label1", this.Button) as Label;
                if (label != null)
                    label.Content = "test";
            }
        }
    }
    J'espère que ça t'aidera
    www.japf.fr mon blog sur WPF et .Net

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Bonjour à tous !

    Merci beaucoup pour cette réponse, ca va aider !
    J'ai une petite colle supplémentaire en rapport avec la question d'origine :

    Imaginons que dans mon template, j'ai une animation.
    J'aimerai, lorsque l'animation est terminée, changer mon template.

    Pour résumer :

    J'ai un listbox dont le itemtemplate est setté sur un template en resource.
    J'ai un template qui possède une animation (on va le nommer tpl1)
    J'ai un template avec une autre tete (on va le nommer tpl2)

    J'aimerai que lorsque l'animation de mon template tpl1 est finie, cela change le template de l'item vers le template tpl2. Si j'ai souligné l'item, c'est pour dire que j'aimerai ne changer le template que sur l'item dont l'animation s'est déclenchée.

    Que feriez vous à ce moment là ?
    J'ai regardé dans l'évenement Completed de l'animation mais je ne retrouve pas de lien vers l'item qui a déclenché cette animation

    Merci d'avance
    @ bientot

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Presque Résolu
    Bonjour a tous,

    C'est pratique dormir un peu, on arrive le lendemain matin aux travail et tous ce fait très bien.
    Thomas merci pour la solution. Ca fonctionne bien. Cela fait ce que je veux.


    Juste deux autre petite questions :
    1. Quand j'overide OnApplyTemplate a l'ouverture de ma fenetre il me retourne null alors que quand je fais le meme code dans l'evenement click d'un bouton ca marche bien.
    1. Bah j'ai oublie la deuxieme question en tapant la premiere.


    Merci
    Pascal Wick
    Programmeur-Analyste Sr.
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut La question m'est revenue
    Thomas,

    Ton livre est-ce qu'il est vraiment horienté vers la pratique?
    Car je ne suis pas très théorique. Je suis plus du type a apprendre par l'exemple.

    Aussi je suis un programmeur WinForm. Apres la lecture de ton livre aurais-je la philosophie WPF ou bien je vais etre un programmeur qui fait du winForm en WPF. Quois que je trouve que je me débrouille quand meme pas mal.

    Merci
    Pascal Wick
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Est-ce une bonne pratique?
    Pour ce qui est de mon style : Est-ce une bonne pratique d'encapsuler des controles dans mon style?

    Où alors je suis totalement dans le champs et il est temps pour moi de partir a la retraite? Je ne veux pas je n'ai que 30 ans et je vais m'ennuyer ...
    Groupe OnePoint
    Pascal Wick
    Programmeur-Analyste Sr.

  14. #14
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par pascalwick Voir le message
    Thomas,

    Ton livre est-ce qu'il est vraiment horienté vers la pratique?
    Car je ne suis pas très théorique. Je suis plus du type a apprendre par l'exemple.
    Chaque point théorique est mis en application avec un exemple pratique, un cas concret.

    Aussi je suis un programmeur WinForm. Apres la lecture de ton livre aurais-je la philosophie WPF ou bien je vais etre un programmeur qui fait du winForm en WPF. Quois que je trouve que je me débrouille quand meme pas mal.
    Tu auras (je l'espère ) la philosophie WPF. Après, à toi de voir si tu veux développer du WPF comme tu le faisais en WinForms ou non bien que, avec la pratique, tu finisses pas te rendre compte tout seul qu'une fois que tu as la philosophie, le reste vient tout seul

  15. #15
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par pascalwick Voir le message
    Pour ce qui est de mon style : Est-ce une bonne pratique d'encapsuler des controles dans mon style?
    D'une manière générale, les ControlTemplates sont définis dans les Styles, c'est plus "WPF" de cette façon

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

Discussions similaires

  1. comment cree un trait controlé par les touches clavier
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 20/11/2008, 15h32
  2. Réponses: 3
    Dernier message: 13/11/2008, 10h26
  3. Inclure des variables dans les critères du recordset
    Par Matgic95 dans le forum Access
    Réponses: 7
    Dernier message: 17/07/2008, 11h38
  4. Réponses: 4
    Dernier message: 29/09/2007, 09h42
  5. java.comm: inclure un JRE dans les sources logiciel?
    Par ccedced dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 07/03/2007, 15h16

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