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 :

Supprimer/Remplacer un contrôle par un autre


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Supprimer/Remplacer un contrôle par un autre
    Bonjour,

    si un contrôle est déclaré dans le XAML, comme est "Button2" dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Window x:Class="TestDynamicControl.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">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
     
            <Button x:Name="Button1" Grid.Column="0" Click="Button1_Click"/>
            <Button x:Name="Button2" Grid.Column="1"/>
        </Grid>
    </Window>
    Est-il possible de le remplacer ou supprimer dynamiquement ?

    Ce code ne fonctionnant pas pour le remplacer :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace TestDynamicControl
    {
        /// <summary>
        /// Interaction logic for Window1.xaml
        /// </summary>
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
            }
     
            private void Button1_Click(object sender, RoutedEventArgs e)
            {
                Button newButton = new Button();
                newButton.Content = "Test";
                Button2 = newButton;
            }
        }
    }
    Ni celui-ci pour le supprimer :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace TestDynamicControl
    {
        /// <summary>
        /// Interaction logic for Window1.xaml
        /// </summary>
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
            }
     
            private void Button1_Click(object sender, RoutedEventArgs e)
            {
                Button2 = null;
            }
        }
    }
    En effet la fenêtre présente toujours le même bouton, même s'il est mis à "null".
    Faut-il dire à la fenêtre de se rafraichir ?


    L'objectif réel étant qu'un contrôle différent soit affiché en fonction des données reçues par l'application.


    Merci.

  2. #2
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    Salut,

    Je n'ai pas testé, mais je pense qu'il serait mieux de créer un container et de modifier son contenu plutôt que de "remplacer" le bouton.

    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
     
    <Window x:Class="TestDynamicControl.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">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
     
            <Button x:Name="Button1" Grid.Column="0" Click="Button1_Click"/>
            <ContentControl x:Name="ContenuVariable" Grid.Column="1"/>
        </Grid>
    </Window>
    Et ensuite via le code écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (test)
    {
    ContenuVariable.Content = new Button("Bonjour");
    }
    else
    {
    ContenuVariable.Content = new Button("Bonsoir");
    }
    A+

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Merci beaucoup de ta réponse, c'est en effet une solution fonctionnelle.

    En fait je souhaiterais faire du polymorphisme : par exemple le xaml déclarerait un contrôle "Button" qui serait remplacé dynamiquement par "BlueButton", "GreenButton" qui eux héritent de "Button" ...
    Le "problème" avec un "ContentControl" est qu'il masque le type du contrôle retirant au XAML une partie de sa sémantique.

  4. #4
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Salut,

    si tes changements de boutons concernent uniquement la couleur (comme tes GreenButton et BlueButton le laissent penser), ou du style, de manière plus générale, tu devrais plutot utiliser des dictionnaires de ressources et les charger/remplacer, parce que du coup, c'est WPF qui fait le boulot pour toi

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Tu as raison mais en fait les boutons n'était qu'un exemple : les contrôles réels sont plus compliqués et font appels à plusieurs sous-contrôles, des "Label" notamment.

    Un exemple proche serait : une hiérarchie de contrôles affichant des factures héritant tous de "FactureControl" : "ClientFactureControl", "FournisseurFactureControl".
    Le XAML serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FactureControl x:Name="FactureControl" ...>
    et le code behind setterait un type différent de "control" selon la facture reçue.

Discussions similaires

  1. [ms-dos] remplacer un mot par un autre
    Par Spidermeu dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 28/07/2006, 12h57
  2. Réponses: 9
    Dernier message: 22/05/2006, 13h21
  3. Remplacer un mot par un autre dans un fichier
    Par vbcasimir dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2006, 13h08
  4. [VB.NET] Comment remplacer une couleur par une autre?
    Par jazz matazz dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/02/2006, 15h29
  5. Remplacer un texte par un autre
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 24/11/2005, 01h40

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