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 :

setter sur une propriété avec binding


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut setter sur une propriété avec binding
    bonjour

    je voudrai changer l'état d'une propriété (dependency property) mais je n'arrive pas avec ce code :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      <DataTemplate DataType="{x:Type local:Class1}">
                        <Canvas x:Name="Canvas_Classe1"
                                Background="Transparent">
    (du code.pour la representation.)
                             <Canvas.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="{Binding Path=MyMouseOver}" Value="True"/>
                                </Trigger>
                            </Canvas.Triggers>
     
                        </Canvas>

    au niveau de ma Classe 1 :

    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
     public static readonly DependencyProperty MyMouseOverProperty = DependencyProperty.Register("MyMouseOver", typeof(bool), typeof(Classe1), 
                                                                                                     new PropertyMetadata(false,new PropertyChangedCallback(On_MyMouseOver)));
     
            private static void On_MyMouseOver(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                Classe1 nd = (Classe1 ) d;
                nd.Classe2.Visibility = nd.MyMouseOver == true ? Visibility.Visible : Visibility.Hidden;
     
            }
     
            public bool MyMouseOver
            {
                get { return (bool)GetValue(MyMouseOverProperty); }
                set { SetValue(MyMouseOverProperty, value); }
            }
    avant de rajouter :
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                            <Canvas.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="{Binding Path=MyMouseOver}" Value="True"/>
                                </Trigger>
                            </Canvas.Triggers>


    tout fonctionnait bien après j'ai ceci :

    "the application is in break mode" , avec cette exeption : System.Windows.Markup.XamlParseException: 'Impossible de définir 'Binding' sur la propriété 'Property' de type 'Setter'. Un 'Binding' ne peut être défini que sur un DependencyProperty d'un DependencyObject.'

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    La propriété Property de la classe Setter n'est pas une DependencyProperty, tu ne peux pas lui affecter un Binding en XAML. Dans ce code tu es seulement censé mettre le nom de la propriété que tu veux affecter par le Setter. Je ne sais pas exactement ce que tu veux faire, peut-être que tout ce dont tu as besoin est :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="MyMouseOver" Value="True"/>
    </Trigger>

    Sinon il va falloir nous donner plus de détails pour qu'on puisse t'aider.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Noxen Voir le message
    La propriété Property de la classe Setter n'est pas une DependencyProperty, tu ne peux pas lui affecter un Binding en XAML. Dans ce code tu es seulement censé mettre le nom de la propriété que tu veux affecter par le Setter. Je ne sais pas exactement ce que tu veux faire, peut-être que tout ce dont tu as besoin est :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="MyMouseOver" Value="True"/>
    </Trigger>

    Sinon il va falloir nous donner plus de détails pour qu'on puisse t'aider.
    si je fait ça : message erreure : MyMouseOver n'est pas reconnue et pas accessible.

    comme j'utilise le trigger du Canvas peut etre quele Setter s'attend à modifier une propriété du Canavas et non de la donnée (Datacontext ) qui est ici "Class1"

    la situation est la suivante :
    j'ai un Datatemplate ==> Datacontext claire
    mais je veux affecté une propriété de ma Donéée de Type Classe1 mais via un Trigger de Canvas qui est un élement visuel !!

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Ah, oui, je suis allé un peu vite dans mon analyse. Si je comprends bien tu veux que lorsque la propriété IsMouseOver du Canvas change cela se répercute sur la propriété MyMouseOver de ta classe. Il s'agit tout simplement d'un Binding entre ces deux propriétés, en mode OneWayToSource (car MyMouseOver ne devrait pas modifier IsMouseOver, dont la valeur n'est modifiée que par la présence de la souris sur le composant).

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    si j'ai bien compris :

    1- Trigger Property="IsMouseOver" Value="True" ==sens unique toujours ==> Property="MyMouseOver" Value="True"
    2-entre Property="IsMouseOver" et Property="MyMouseOver" : y a t il vraiment un binding?

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Oublie le Trigger. Ce que tu veux c'est un Binding entre la propriété IsMouseOver du Canvas et la propriété MyMouseOver de ta classe. Tu utiliserais un Trigger dans le Canvas si tu souhaitais faire quelque-chose dans le Canvas lorsqu'un événement est levé ; ex : modifier la couleur de fond du Canvas sur mouse over, déclencher une animation, etc...

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
     <Canvas x:Name="Canvas_Classe1" Background="Transparent" IsMouseOver="{Binding MyMouseOver, Mode=OneWayToSource}">
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    je ne peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Canvas .......   IsMouseOver="{Binding Path=MyMouseOver, Mode=OneWayToSource}"

  9. #9
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Pourquoi ne pourrais-tu pas faire ça ?

  10. #10
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
     <Canvas x:Name="Canvas_Classe1" Background="Transparent" IsMouseOver="{Binding MyMouseOver, Mode=OneWayToSource}">
    une erreure : la propriété IsMouseOver est readonly et ne peut etre modifiée du Mark up
    en plus l'intellisence ne me donne pas IsMouseOver , sa mentionne uniquement des : IsMouseCapturedChanged ou IsMouseCaptureWithinChanged , IsMouseDirectlyOverChanged.

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Dans ce cas explique nous ce que tu veux faire sur mouse over, car tu as sûrement pas besoin d'une propriété idmouseover, les données ne doivent pas avoir d'info de design en wpf
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    j'ai deux classes : Classe1 et Classe2
    chacune regroupée dans une collection dédiée
    aprés avec une CombinedCollection je les "combine "

    je les rerésentes dans une Listbox mais avec deux DataTemplate différents , la ListBox est liée à la CombinedCollection

    et sa marche, je les bouge vie la sourie...tout va bien, aprés je veux conditionner la deuxième représentation(classe2) : je veux que dans le DataTemplate de classe2 la visibility soit le résultat d'un MouseOver mais sur la représentation (DataTemplate ) de Classe1.

    Maintenant j'ai fait 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
     
    public class CanvaNetwork :Canvas
        {
            public  CanvaNetwork() { }
     
     
    // cette fois avec get et set
            public bool NewMouseOver
            {
                get { return (bool)GetValue(NewMouseOverProperty); }
                set { SetValue(NewMouseOverProperty, value); }
            }
     
            // Using a DependencyProperty as the backing store for NewMouseOver.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty NewMouseOverProperty =
                DependencyProperty.Register("NewMouseOver", typeof(bool), typeof(CanvaNetwork), new PropertyMetadata(false));
     
     
        }
    la propriété NewMouseOver est une DependencyProperty et appartien au Visual Canvas (dans mon cas CanvaNetwork )

    j'ai remplacer Canvas par CanvaNetwork

    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
     <DataTemplate DataType="{x:Type local:Class1}" >
                        <CanvaNetwork x:Name="ItemCanvas_Classe1"  
                               NewMouseOver="{Binding MyMouseOver, Mode=OneWayToSource}"
                                Background="Transparent"    > 
                            <Path x:Name="Path_Class1" 
                                    Stroke="Green"
                                    Fill="Gray"
                                    Stretch="None"
                                    Data="{Binding  Path =Geometryform}"
                                    Visibility="{Binding Path=Visibility}"/>
                                                      
                                               
    
                            <Canvas.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter  Property="NewMouseOver"  Value="True"/>
                                </Trigger>
                            </Canvas.Triggers>
    
                        </CanvaNetwork>
                        
                    </DataTemplate>

    voici celui de Classe2:
    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
    <DataTemplate DataType="{x:Type local:Classe2}">
                        <Canvas x:Name="ItemCanvas_Classe2"
                                Background="Transparent">
                           
                            <Label  x:Name="Mylabel" 
                                    Visibility="{Binding Path=Visibility}"
                                    Content="{Binding Path=LabelText }" 
                                    Foreground="{Binding Path=ForegroundColor}"
                                    Background="{Binding Path=BackgroundColor}"
                                    BorderBrush="{Binding Path=BorderBrushColor}" BorderThickness="2"
                                    Canvas.Left="{Binding Path=LabelX}"
                                    Canvas.Top="{Binding Path=LabelY}" >
                            </Label>
                           
                        </Canvas>
                    </DataTemplate>




    dans mon code c# au niveau de ma Class1

    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
     public static readonly DependencyProperty MyMouseOverProperty =
                DependencyProperty.Register("MyMouseOver", typeof(bool), typeof(Class1), new PropertyMetadata(false,new PropertyChangedCallback(On_MyMouseOver)));
    
            private static void On_MyMouseOver(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                Class1 OBJ1 = (Classe1) d;
                OBJ1.OBJ2.Visibility = OBJ1.MyMouseOver == true ? Visibility.Visible : Visibility.Hidden;
                //OBJ2 est de type Classe2...c'est là que je fait basculer sa visibility  qui est lieé dans le XAML
            }
    
            public bool MyMouseOver
            {
                get { return (bool)GetValue(MyMouseOverProperty); }
                set { SetValue(MyMouseOverProperty, value); }
            }
    cette dernière tentative est aussi un échec car NewMouseOver n'existe dans mon nouveau Canvas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <Canvas.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter  Property="NewMouseOver"  Value="True"/>
                                </Trigger>
                            </Canvas.Triggers>

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    qu'es-ce que tu appelles une combined collection ?

    si class2 est un "enfant" de class1 au niveau du datatemplate de classe1 tu pourrais t'en sortir avec un binding elementname

    tu n'aurais pas besoin d'un ItemTemplaceSelector dans l'histoire ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    qu'es-ce que tu appelles une combined collection ?

    si class2 est un "enfant" de class1 au niveau du datatemplate de classe1 tu pourrais t'en sortir avec un binding elementname

    tu n'aurais pas besoin d'un ItemTemplaceSelector dans l'histoire ?
    classe1 et Classe2 sont séparées
    Classe1 contien classe2

    Classe1
    {

    classe2 OBJ2;

    }

    le problème n'est pas dans combiendcollection de ce coté sa marche et la représentation des deux différent types fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Classe1Coll = new ObservableCollection<Classe1>();
                Classe2Coll = new ObservableCollection<Classe2>();
    et dans mon Xaml :
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     <Window.Resources>
     
            <CollectionViewSource x:Key="ViewSource1" Source="{Binding Classe1Coll, Mode=TwoWay}" />
            <CollectionViewSource x:Key="ViewSource2" Source="{Binding Classe2Coll, Mode=TwoWay}" />
     
          <CompositeCollection x:Key="CombinedCollection">
                <CollectionContainer Collection="{Binding Source={StaticResource ViewSource1}}" />
                <CollectionContainer Collection="{Binding Source={StaticResource ViewSource2}}" />
     
            </CompositeCollection>
     
    </Window.Resources>

  15. #15
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    meme comme ça pas moyen ?.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <local:CanvaNetwork.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter  Property="NewMouseOver"  Value="True" />
                </Trigger>
    </local:CanvaNetwork.Triggers>
    En creant le "CanvaNetwork" et en le dotant d'une dependecy Property (comme il faut) cette derrnière resete inaccécible pour le Setter !

    Je suis bloqué

  16. #16
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Effectivement c'est un problème que je pensais trivial au départ mais c'est un peu plus compliqué que prévu. J'ai réussi à bricoler un truc avec du code behind pour le résoudre, bien que je n'en soit pas entièrement satisfait. Je tâcherai de le poster quand j'aurais un peu de temps, en attendant de trouver une solution plus propre.

  17. #17
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Noxen Voir le message
    Effectivement c'est un problème que je pensais trivial au départ mais c'est un peu plus compliqué que prévu. J'ai réussi à bricoler un truc avec du code behind pour le résoudre, bien que je n'en soit pas entièrement satisfait. Je tâcherai de le poster quand j'aurais un peu de temps, en attendant de trouver une solution plus propre.
    vite

  18. #18
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Bonjour

    En creant le "CanvaNetwork" et en le dotant d'une dependecy Property (comme il faut) cette derrnière resete inaccécible pour le Setter !
    Et ça ne marchera jamais...
    Parce que simplement les Triggers (tels que tu les utilises) ne peuvent recevoir que des Event Setters...comme rappelé par Pol63...


    Pour utiliser des Property Setters il faut un Style du Canvas (en Resources du Canvas )
    (Un style pour un Canvas ,c'est plutôt débile mais c'est le seul moyen...)

    De plus ,meme dans un Style,lier ta prop par un Binding à IsMouverOver d'un Canvas échouera lamentablement !!!
    Car la DP IsMouverOver est une DP Readonly

    Seule issue les Triggers en "cascading"

    code exemple ci-apres:
    class CustCanvas:
    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
     
    public class CustCanvas : Canvas
        {
            static CustCanvas()
            {
                //DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomCanvas), new FrameworkPropertyMetadata(typeof(CustomCanvas)));
            }
            public CustCanvas()
            {
     
            }
     
     
            public string Message
            {
                get { return (string)GetValue(MessageProperty); }
                set { SetValue(MessageProperty, value); }
            }
     
            // Using a DependencyProperty as the backing store for Message.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty MessageProperty =
                DependencyProperty.Register("Message",
                typeof(string),
                typeof(CustCanvas),
                new UIPropertyMetadata("Alias = False"));
     
     
     
            public bool AliasMouseOver
            {
                get { return (bool)GetValue(AliasMouseOverProperty); }
                set { SetValue(AliasMouseOverProperty, value); }
            }
     
            // Using a DependencyProperty as the backing store for NewMouseOver.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty AliasMouseOverProperty =
                DependencyProperty.Register("AliasMouseOver",
                typeof(bool), 
                typeof(CustCanvas),
                new FrameworkPropertyMetadata(false));
     
     
        }
    code xaml user :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <Window x:Class="WpfApplication3.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication3"
            Title="Window1" Height="300" Width="300">
        <Window.Resources>
            <Style TargetType="{x:Type local:CustCanvas}">
                <Setter  Property="Background"  Value="LightGray"  />
                <Setter  Property="Message"  Value="Alias = False"  />
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Background" Value="Magenta" />
                        <Setter Property="AliasMouseOver" Value="true" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="false">
                        <Setter Property="Background" Value="LightGray" />
                        <Setter Property="AliasMouseOver" Value="false" />
                    </Trigger>
                    <Trigger Property="AliasMouseOver" Value="true">
                        <Setter Property="Message" Value="Alias = True" />
                    </Trigger>
                    <Trigger Property="AliasMouseOver" Value="false">
                        <Setter Property="Message" Value="Alias = False" />
                    </Trigger>
                </Style.Triggers>
            </Style>
     
     
        </Window.Resources>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"></RowDefinition>
                <RowDefinition Height="auto"></RowDefinition>
            </Grid.RowDefinitions>
            <local:CustCanvas 
                x:Name="cnv"
                Width="250" Height="250"
                >
                <TextBlock 
                    Canvas.Left="50" Canvas.Top="50"
                    Background="White" Foreground="DarkRed" FontSize="20"
                    Text="{Binding ElementName=cnv,Path=Message}"/>
                <Rectangle 
                    Canvas.Left="50" Canvas.Top="100"
                    Width="150" Height="60" Fill="Red" 
                    Stroke="Yellow" StrokeThickness="3.0"/>
     
            </local:CustCanvas>
        </Grid>
    </Window>

    Néanmoins ,le code communique me semble nettement insuffisant pour répondre à la question du post ...
    On ne sait rien sur le type de Class1 & Class2, ni la finalite de tout ce travail ...

  19. #19
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je peux le redire : problème de conception ou d'interface, une classe n'a pas à savoir comme c'est sur l'UI
    il y a moyen de s'en sortir autrement (que l'ui de classe 2 connaisse l'ui du classe1)
    mais tu n'as pas réellement expliqué comment tu veux afficher tes données ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  20. #20
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Merci à tout le mode

    je veux afficher des noeuds (différentes formes) ==> Classe1 = Classe Node , les "Node" sont regroupés dans une Observablecollection "NodeColl"


    Je veux liers des desciptions c-à-d une Description pour chaque Node, la Description est Class2 =Class Descrip , regroupés dans "DescripColl"
    les deux collections sont regroupées dans une CombinedCollection à laquelle une ListBox est liée , et sa marche s'a affiche et je bouje les différents objects.

    aulieu de parler de Calsse1 et Classe2 j'aurai dû dés le départ utiliser "Node" et "Descrip"


    Pour une raison la description ne doit apparetre que si la souri et sur le "Node"

    Dans ma class Node j'ai une réfernce de Description.

    important : Coté XAML , Je ne dois pas inclure le UI de "Description" dans UI de "Node" c'est pour cela que j'ai deux DataTemplate

Discussions similaires

  1. Binding sur une propriété
    Par Villard.patrick dans le forum Silverlight
    Réponses: 5
    Dernier message: 09/12/2009, 17h52
  2. binding sur une propriété shared (vb) static (c#) ?
    Par Pol63 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 24/06/2009, 15h44
  3. Création tag avec test sur une proprièté d'un bean
    Par Didine981 dans le forum Struts 1
    Réponses: 1
    Dernier message: 04/06/2009, 22h08
  4. Binding sur une propriété avec paramètre
    Par FRED.G dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 17/11/2008, 18h38
  5. [Databinding] bind sur une propriété d'une collection
    Par herveb dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 11/12/2007, 10h35

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