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 :

x:Class soucis de compréhension


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Par défaut x:Class soucis de compréhension
    Bonjour

    Mon petit soucis est le suivant, je viens de développer un "contrôle personnalisé wpf" pour un de mes projets qui est composé d'un calendar lié à l'événement "SelectedDatesChanged".

    J'ai ainsi codé la fonction lui correspondant dans le fichier .cs de mon contrôleur.

    Lors de la compilation j'obtiens l'erreur suivante me demandant de rajouter un attribut x:Class="".

    Erreur de génération inconnue, 'MC6024*: l'élément racine 'ResourceDictionary' nécessite un attribut x:Class pour prendre en charge les gestionnaires d'événement du fichier XAML. Supprimez le gestionnaire d'événement de l'événement SelectedDatesChanged ou ajoutez un attribut x:Class à l'élément racine.

    Voici le code wpf de mon dictionnaire de ressources (pour mes contrôleurs perso):

    Code xml : 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
     
    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
        xmlns:local="clr-namespace:TIMETABLEASY.EasyCalendar.Controler">
     
        <Style TargetType="{x:Type local:TimeTable}" x:Class="">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:TimeTable}">
                        <Grid>
     
                            ...
     
                            <Grid Grid.Row="1" Margin="0,-22.5,0,0">
                                <Expander Header="2010" Margin="470,0,0,0" Name="date_expander" Height="177.76" VerticalAlignment="Top" HorizontalAlignment="Left" Width="186.633">
                                    <Grid Height="158" Margin="-79,0,0,0">
                                        <my:Calendar Name="week_select_calendar" SelectionMode="SingleRange" SelectedDatesChanged="week_select_calendar_SelectedDatesChanged"
                                                     Margin="-1,0,2.096,0" Height="157.982" VerticalAlignment="Top" />
                                    </Grid>
                                </Expander>
                            </Grid>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
     
    ...

    Voici le code ma classe correspondant au contrôleur en question :

    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
    23
     
     
    ...
     
    namespace TIMETABLEASY.EasyCalendar.Controler
    {
        public class TimeTable : Control
        {
            static TimeTable()
            {
                DefaultStyleKeyProperty.OverrideMetadata(typeof(TimeTable), new FrameworkPropertyMetadata(typeof(TimeTable)));
     
                ...
     
            }
     
            private void week_select_calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
            {
                MessageBox.Show("Test SelectedDatesChanged event ok");
            }
     
        }
    }

    J'ai tenté plusieurs tentatives avec le x:Class aboutissant à des erreurs une fois de plus, je saisi pas réellement ou il faut le mettre.

    Pour ma part je l'avais rajouter dans l'entête avec les autres ressources (x:Class="TIMETABLEASY.EasyCalendar.Controler.TimeTable") mais ça rentre en conflit avec mon local:.... .

    Ce que j'aimerai maintenant c'est trouver une solution pour lier un événement entre le contrôleur wpf et sa classe.

    Merci d'avance pour toutes aides,

    Myzha

  2. #2
    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,

    L'abonnement à l'évènement peux être fait côté code behind. C'est comme ça que je procède. Il y a peut-être la possibilité de le faire côté xaml, mais j'ai jamais vu d'exemple dans ce sens... Est-ce pour des raisons de faisabilité ou de bonnes pratiques...

    Ça pourrait donner quelque chose comme ça :
    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
    23
    24
    25
    26
    27
    28
    29
      [TemplatePart(Type = typeof(Calendar), Name = TimeTable.CALENDAR_NAME)]
      public class TimeTable : Control {
        private const string CALENDAR_NAME = "week_select_calendar";
     
        private Calendar m_Calendar;
     
       ...
     
     
        #region Overrides Methods
     
        public override void OnApplyTemplate() {
          base.OnApplyTemplate();
     
          this.m_Calendar = this.Template.FindName(CALENDAR_NAME, this) as Calendar;
     
          if (this.m_Calendar != null) {
            this.m_Calendar.SelectedDatesChanged += this.week_select_calendar_SelectedDatesChanged;
          }
        }
     
        #endregion
     
        private void week_select_calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
        {
            MessageBox.Show("Test SelectedDatesChanged event ok");
        }
     
      }
    Et il faut supprimer l'abonnement à l'événement coté xaml ainsi que le x:Class=""

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Par défaut
    Merci Binoo,

    je viens d'utiliser ta solution et elle fonctionne parfaitement

    Par contre si quelqu'un à une solution avec le x:Class ça m'intéresserai aussi (pour la culture).

    Bonne journée

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

Discussions similaires

  1. Souci de compréhension du résultat
    Par Eclipse39 dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2009, 23h58
  2. Classes : question de compréhension
    Par kanabzh29 dans le forum Langage
    Réponses: 6
    Dernier message: 06/11/2008, 11h26
  3. Souci de compréhension d'organisation
    Par ldv dans le forum Zend Framework
    Réponses: 2
    Dernier message: 09/10/2008, 09h51
  4. [JTable][RowFilter] Souci de compréhension
    Par mavina dans le forum Composants
    Réponses: 1
    Dernier message: 11/09/2008, 10h33
  5. Petit soucis de compréhension
    Par AlexB59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/10/2005, 10h18

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