2009-09-30 8 views
0

J'ai un modèle de contrôle personnalisé qui contient un contrôle Slider.
Je nom comme une partie de la classe qui implémente le contrôle personnalisé:Valeur de propriété de définition de problème sur le modèle de contrôle personnalisé Pièce

[TemplatePart(Name = MapZoomSliderName, Type = typeof(Slider))] 

Dans la dérogation OnApplyTemplate(), je reçois le curseur:

 MapZoomSlider = (Slider) GetTemplateChild("MapZoomSlider"); 
     if (null != MapZoomSlider) 
     { 

      MapZoomSlider.ValueChanged +=new RoutedPropertyChangedEventHandler<double>(MapZoomSlider_ValueChanged); 
      MapZoomSlider.Value = InitSliderValue; // crash 
      _lastSliderValue = MapZoomSlider.Value; 
     } 

Lorsque je tente de régler le curseur de Propriété de valeur, l'application se bloque avec "Référence d'objet non définie sur une instance d'un objet".
Obtenir la valeur du curseur fonctionne comme prévu.
Que dois-je faire pour définir la valeur du curseur lors de l'exécution?
Merci pour tous les conseils ...

Répondre

0

Qu'est-ce que c'est «InitSliderValue»? Peut-être que c'est le mauvais type de valeur? (Doit être un double) En outre, zéro ou négatif peut ne pas être une valeur valide.

0

Il semble que le problème consistait à définir le gestionnaire ValueChanged avant de modifier la propriété Value. Le gestionnaire ValueChanged essaie de manipuler d'autres parties de l'application, des parties qui ne sont peut-être pas encore prêtes.
Si je définis la valeur, puis ajouter le gestionnaire, cela fonctionne comme vous le souhaitez.

MapZoomSlider.Value = InitSliderValue; // all good 
MapZoomSlider.ValueChanged +=new RoutedPropertyChangedEventHandler<double>(MapZoomSlider_ValueChanged); 
Questions connexes