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.
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. –
oui, j'ai fait cela, et à plusieurs reprises, à cela. Voulez-vous un exemple vivant? – Vinzz
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é? –