2010-04-08 5 views
2

Je veux prendre une photo une fois une image est chargée, et voici un extrait de code:Comment vérifier si une image est chargée dans silverlight

imageBrush.ImageOpened + = (expéditeur, e) = > { fait quelque chose(); };

Un problème avec cet extrait de code est que si la brosse d'image est déjà chargée, l'événement ne sera pas tiré, donc je besoin d'un moyen de vérifier que l'image est déjà chargé, mais il semble qu'il n'y ait pas « IsLoaded "Propriété à Silverlight. Pourriez-vous suggérer une solution de contournement facile?

+0

Qu'en est-il de vérifier si la hauteur ou la largeur réelle sont différentes? –

+0

Pouvez-vous expliquer comment vous utilisez un 'ImageBrush' pour prendre un instantané? Pourquoi n'utilisez-vous pas le contrôle 'Image'? Je crois que Jeff fait référence au contrôle 'Image' dans son commentaire. La propriété Image controls Width reste 0 jusqu'à ce que la source soit complètement chargée, en supposant que vous ne l'avez pas définie vous-même. – AnthonyWJones

Répondre

0

Vous pouvez vérifier qu'une propriété Width du contrôle Image est différente de zéro pour tester son chargement.

Il peut donc être que vous pouvez également utiliser le BitmapSourcePixelWidth propriété pour effectuer le même test: -

bool isLoaded = ((BitmapSource)ImageBrush.ImageSource).PixelWidth == 0; 

Je n'ai pas testé moi-même, mais il semble logique.

+0

Merci pour votre réponse, mais j'ai un autre problème et je me demande si vous pouvez m'aider avec celui-ci aussi. Un canevas est reçu en provenance du serveur et un pinceau d'image est extrait du canevas via la recherche d'un chemin. En résumé, Canvas -> Path -> Path.Fill -> ImageBrush. Maintenant, je veux prendre un instantané de l'ImageBrush en utilisant WriteableBitmap lorsqu'il est chargé et voici ce que je faisais – umlgorithm

+0

var imageBrushes = VisualTreeUtility.FindVisualChildren (toile) .Lorsque (i => i.Fill.GetType() == typeof (ImageBrush)) .Sélectionnez (p => p.Fill); foreach (image var dans les imagesBrush) { image.ImageOpened + = delegate {// n'arrive jamais !! } si (image.isLoaded()) { // J'ai fait une extension en fonction de votre extrait de code // Il obtient ici quand il a une largeur non nulle }} – umlgorithm

+1

@umlgorithm: Il serait beaucoup mieux pour vous de poster une autre question que d'essayer de presser et question supplémentaire dans les commentaires sur la réponse, comme vous pouvez le voir, le code ne se met pas très bien dans les commentaires. Les commentaires sont vraiment pour la discussion d'une réponse ou d'une question spécifique ou pour des demandes mineures de clarification d'une réponse. – AnthonyWJones

Questions connexes