2010-03-30 8 views
2

Quelle est la meilleure méthode pour ajouter mes propres propriétés à un contrôle Silverlight existant? Par exemple, je voudrais associer une classe personnalisée avec le DataGrid et pouvoir définir les propriétés de cette classe personnalisée dans Expression Blend?Ajout de propriétés personnalisées aux contrôles Silverlight

Est-ce une chose facile à faire?

Merci,

AJ

Répondre

1

Par héritage, il est assez facile à faire.

Voici par exemple un DataGrid qui déclenche un événement de validation en entrant une séquence de touches.

namespace SLCommon 
{ 
    public delegate void VaditateSelectionEventHandler(object sender, EventArgs e); 

    /// <summary> 
    /// Fires a validate event whenever the enter key or the left mouse button is pressed 
    /// </summary> 
    public class EventDatagrid : DataGrid 
    { 
     public event VaditateSelectionEventHandler Validate; 

     public EventDatagrid() 
      : base() 
     { 
      this.MouseLeftButtonUp += new MouseButtonEventHandler(OnMouseLeftButtonUp); 
     } 

     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      if (e.Key != Key.Enter) 
       base.OnKeyDown(e); 
      else 
      { 
       e.Handled = true; 
       Validate(this, e); 
      } 
     } 

     protected void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
     { 
      Validate(this, e); 
     } 
    } 
} 

côté XAML:

<slc:EventDatagrid x:Name="toto" Validate="toto_Validate" 
          AutoGenerateColumns="True" IsReadOnly="True" Width="auto" MaxHeight="300"> 
</slc:EventDatagrid> 

Notez le gestionnaire d'événements Valider.

Ici, après que vous pouvez ajouter un contrôle myobj dans un fichier xaml (assurez-vous de déclarer l'espace de noms xmlns: en haut de votre page) et définissez sa propriété. Je ne connais pas le mélange, mais cela fonctionne de la même manière.

+0

Bonjour, avez-vous réellement fait cela? J'avais l'impression que les contrôles Silverlight sous-classés ne s'initialisent pas lors de l'exécution. –

+0

oui, j'ai fait cela, et à plusieurs reprises, à cela. Voulez-vous un exemple vivant? – Vinzz

+0

Cela fonctionne, merci beaucoup. Mais si vous faites une recherche sur Google, toutes sortes de problèmes sont mentionnés. Les versions antérieures de SL n'avaient-elles pas cette capacité? –

1

Une autre option consisterait à utiliser un comportement/propriété joint. C'est l'argument héritage/composition - pour étendre la fonctionnalité de la classe X, héritez-vous de la classe X et étendez-la, ou créez-vous la classe Y qui contient la classe X?

Voici un exemple de quelqu'un à ajouter PixelSnapping SL via comportement attaché: http://blogs.msdn.com/devdave/archive/2008/06/22/Using-an-Attached-DependencyProperty-to-Implement-Pixel-Snapping-as-an-Attached-Behavior.aspx

Questions connexes