2012-11-13 1 views
2

Essentiellement ce que j'essaie de faire est de déclencher une sorte d'état «sale» pour ma toile, de sorte que je sais s'il y a des changements non enregistrés.Existe-t-il un type d'événement générique InkCanvas StrokesChanged?

Existe-t-il un événement dans le WPF InkCanvas que je peux utiliser pour gérer le moment où les traits changent?

Si ce n'est pas le cas, quels événements dois-je écouter pour l'équivalent? Ma première hypothèse serait ce:

StrokeCollected 
StrokeErased 
StrokesReplaced 

Bien que je peux me tromper, et ne pas comporter d'affaire bord.

Note: Ce n'est pas un gros problème si je reçois des faux positifs (marqué sale quand ce n'est pas le cas), mais je ne veux pas de faux négatifs.

Répondre

1

Il semble que ces événements feront le travail:

  • InkCanvas.StrokesReplaced (se produit lorsque le Strokes propriété est définie)
  • StrokeCollection.StrokesChanged (se produit quand un accident vasculaire cérébral est ajouté ou supprimé)
  • Stroke.StylusPointsChanged (se produit lorsque la forme d'un trait est modifiée)
  • Stroke.StylusPointsReplaced (se produit lorsque la propriété StylusPoints est définie)
  • Stroke.DrawingAttributesChanged (se produit lorsque les attributs d'un AVC sont modifiés)
  • Stroke.DrawingAttributesReplaced (se produit lorsque la propriété DrawingAttributes est définie)

Dans mon cas, je remplacerai jamais propriétés ou modifier les attributs de dessin, de sorte que je n'utilise que StrokeCollection.StrokesChanged et Stroke.StylusPointsChanged. Voici un extrait de mon code.

public MainWindow() 
{ 
    inkCanvas.Strokes.StrokesChanged += Strokes_StrokesChanged; 
} 

private void Strokes_StrokesChanged(object sender, StrokeCollectionChangedEventArgs e) 
{ 
    // Mark dirty 
    foreach (Stroke stroke in e.Added) 
    { 
     stroke.StylusPointsChanged += stroke_StylusPointsChanged; 
    } 
    foreach (Stroke stroke in e.Removed) 
    { 
     stroke.StylusPointsChanged -= stroke_StylusPointsChanged; 
    } 
} 

private void stroke_StylusPointsChanged(object sender, System.EventArgs e) 
{ 
    // Mark dirty 
}