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 :

WPF UserControl et Modal Dialog


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

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

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut WPF UserControl et Modal Dialog
    Salut tout le monde,

    ma Question est simple, est il possible pour un UserControl(WPF) de generer un Modal Dialog qui peut contenir a son tour un ListView par exemple??

    Pourquoi le UserControl? parce que en fait c'est contenu dans un ElementHost.


    Merci pour l'aide

  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 : 44
    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
    Le fait que ce soit un UserControl ne change pas grand chose, tu peux toujours faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonDialogueModal dialog = new MonDialogueModal();
    bool? result = dialog.ShowDialog();

  3. #3
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

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

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut
    Merci Tomlev,

    mais en fait ca ne resoud pas mon problem... avec un wpf (window) j'ai par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
     
            void OnOpenList(object sender, OpenListEventArgs e)
            {
                var dlg = new OpenListDialog { Owner = this, WindowStartupLocation = WindowStartupLocation.CenterOwner };
            }
        }
    Mais dans un wpf ou MainWindow est un UserControl heritant de UserControl ceci ne fonctionne pas car les UserControl n'ont pas de Owner.

    Comment avoir cette meme fonction OnOpenList pour des UserControls?

    Merci

  4. #4
    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 : 44
    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
    Pourquoi veux-tu préciser le Owner ? Ce n'est pas nécessaire pour afficher un dialogue modal... Si tu tiens à la faire, tu peux toujours récupérer la fenêtre qui contient le UserControl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void OnOpenList(object sender, OpenListEventArgs e)
    {
        var dlg = new OpenListDialog { Owner = Window.GetWindow(this), WindowStartupLocation = WindowStartupLocation.CenterOwner };
    }

  5. #5
    Membre éclairé Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

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

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Par défaut
    Soit je me suis mal explique ou bien quelque chose cloche!!

    J'ai mis une image pour un peu plus eclaire ma lanterne.

    j'aimerais afficher dans le MainWindow.xaml le OpenListDialog.xaml comme un Modal Dialog.

    MainWindow.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <UserControl x:Class="Views.MainWindow"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                 mc:Ignorable="d"
                 Name="MainView"    
                 d:DesignHeight="300" d:DesignWidth="300" >
     
       .....
     
    </UserControl>


    OpenListDialog.xaml
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <UserControl x:Class="Views.OpenListDialog"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 Name="OpenList"
                 d:DesignHeight="300" d:DesignWidth="300">
    ...
     
    </UserControl>


    Ensuite j'ai essaye comme tu l'as dis Tomlev :

    Code c# : 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
     
    public partial class MainWindow : UserControl
        {
            private MainViewModel _viewModel;
     
            public MainWindow()
            {
                InitializeComponent();
     
                _viewModel = DataContext as MainViewModel;
                _viewModel.OpenList += OnOpenList;
            }
     
            void OnOpenList(object sender, OpenListEventArgs e)
            {
                var dlg = new OpenListDialog { Owner = Window.GetWindow(this), WindowStartupLocation = WindowStartupLocation.CenterOwner };
                if (dlg.ShowDialog() == true)
                {
                    e.ListIDToOpen = dlg.ViewModel.CurrentList.PersonListID;
                }
            }
        }

    Mais ca ne fonctionne pas j'ai des Messages d'erreur au niveau de : Owner, WindowStartupLocation et ShowDialog.

    Ou se trouve mon erreur?


    Merci
    Images attachées Images attachées  

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    En fait tu as l'air de partir du principe que tu peux mettre un UserControl sans avoir défini au préalable une Window. Est-ce que je me trompe ?

    En résumé tu dois partir d'une fenêtre (avec ou sans la bordure et les boutons "minimiser", "maximiser" et "fermer") et dedans tu peux placer ton UserControl. A aucun moment, tu peux afficher un UserControl tout seul.


    Donc faire ceci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    var dlg = new OpenListDialog { Owner = Window.GetWindow(this), WindowStartupLocation = WindowStartupLocation.CenterOwner };
    (où OpenListDialog est un UserControl)
    ne peut en effet pas fonctionner, car un UserControl n'a pas ces fameuses propriétés.

  7. #7
    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 : 44
    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
    Ah ok, j'avais mal compris... tu ne peux pas afficher directement un UserControl comme un dialogue, puisque ce n'est pas une fenêtre... par contre tu peux le mettre dans une fenêtre et afficher la fenêtre de façon modale :

    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
            void OnOpenList(object sender, OpenListEventArgs e)
            {
                var openListDlg = new OpenListDialog();
                var dlg = new Window
                {
                    Owner = Window.GetWindow(this),
                    WindowStartupLocation = WindowStartupLocation.CenterOwner,
                    SizeToContent = SizeToContent.WidthAndHeight,
                    Content = openListDlg
                };
                if (dlg.ShowDialog() == true)
                {
                    e.ListIDToOpen = openListDlg.ViewModel.CurrentList.PersonListID;
                }
            }
    Mais bon, a priori il y aura d'autres choses à faire pour que ça marche... pour l'instant il n'y a rien qui va fermer la fenêtre en mettant le bon DialogResult

    Pourquoi c'est un UserControl ton truc ? Ca devrait être une fenêtre si tu veux l'afficher comme un dialogue...

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

Discussions similaires

  1. [WPF] UserControl -> binding ??
    Par UNi[FR] dans le forum C#
    Réponses: 1
    Dernier message: 10/09/2007, 11h31
  2. [WPF] UserControl pour un historique de nav
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 10/09/2007, 11h19
  3. [WPF] UserControl: impossible à ajouter à la toolbox
    Par SoBaKa dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 23/05/2007, 09h14
  4. modal dialog struts
    Par inf018 dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/01/2007, 22h02
  5. Modal dialog window
    Par aymanov dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/12/2005, 12h37

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