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 :

Référencer la fenêtre courante via "ElementName"


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 Référencer la fenêtre courante via "ElementName"
    Bonjour,

    un truc assez étrange : pour référencer la fenêtre courante dans un binding il devrait être possible de la nommer via "x:Name" et de la référencer via "ElementName";
    mais ce n'est apparemment pas le cas 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <Window
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="Wpf.Window1"
        x:Name="Window"
     
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     
        xmlns:local="clr-namespace:Wpf"
     
        Title="Window1" Width="100" Height="150">
        <StackPanel>
            <Border BorderBrush="Blue" BorderThickness="1">
                <Label Content="{Binding ElementName=Control,Path=Test}" Height="25" />
            </Border>
            <Border BorderBrush="Blue" BorderThickness="1">
                <Label Content="{Binding ElementName=Window,Path=Test}" Height="25" />
            </Border>
            <Border BorderBrush="Blue" BorderThickness="1">
                <Label Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},Path=Test}" Height="25" />
            </Border>
            <local:UserControl1 x:Name="Control"/>
        </StackPanel>
    </Window>
    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
    using System.Windows;
     
    namespace Wpf
    {
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
     
                Test = "123";
            }
     
            public string Test
            {
                get;
                set;
            }
        }
    }
    Il est en revanche possible d'y accéder via "RelativeSource" comme le montre l'exemple précédent.

    De même le binding via "ElementName" fonctionne parfaitement avec le "UserControl1" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <UserControl
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="Wpf.UserControl1"
     
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    />
    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
    using System.Windows.Controls;
     
    namespace Wpf
    {
        public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
     
                Test = "456";
            }
     
            public string Test
            {
                get;
                set;
            }
        }
    }

    Il doit manquer un détail, mais lequel ?


    Merci.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Etrange, il me semble avoir déjà fait quelque chose comme cela pourtant

    Et si tu nommes ta fenêtre window au lieu de Window ?

  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 de ta réponse, mais même en lui donnant un nom sans collision possible avec le framework, comme "fenetre", le résultat est le même.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Voila qui est très étrange

    Et si tu essaye ceci:

    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
    Window
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="Wpf.Window1"
        x:Name="Window"
     
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     
        xmlns:local="clr-namespace:Wpf"
     
        Title="Window1" Width="100" Height="150">
        <StackPanel>
            <Border BorderBrush="Blue" BorderThickness="1">
                <Label Content="{Binding ElementName=Control,Path=Test}" Height="25" />
            </Border>
            <Border BorderBrush="Blue" BorderThickness="1">
                <Label Content="{Binding ElementName=Window,Path=Children[2].Content}" Height="25" />
            </Border>
            <Border BorderBrush="Blue" BorderThickness="1">
                <Label Content="Test" x:Name="lbl" Height="25" />
            </Border>
            <local:UserControl1 x:Name="Control"/>
        </StackPanel>
    </Window>

  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
    Toujours rien malheureusement.

    Ça aurait dû afficher quoi ?

    En tout cas merci de t'intéresser au problème.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Ca aurait du afficher le contenu du label lbl

    je tacherais de mieux regarder à l'occasion

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

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