2011-09-18 5 views
1

J'ai un contrôle Image, généré en cours d'exécution. Il rend la taille correcte lors de l'affichage. Mais je ne peux pas obtenir la taille de cet élément. Width et Height est NaN. ActualWidth et ActualHeight est toujours 0.0 et le contrôle ne déclenche jamais l'événement SizeChanged.Je ne peux pas obtenir ActualSize d'un UIElement

enter image description here

Je suis aussi générer TextBoxes dans le moteur d'exécution et je ne peux pas obtenir la taille d'entre eux aussi.

Le code qui génère l'image est ci-dessous.

ExtendedImage image = new ExtendedImage(); 
image.Name = "element" + item.Id; 
if (item.Text.ToUpperInvariant().EndsWith(".GIF")) 
{ 
    var gif = BookReader.Imaging.GIFDecoder.Decode(Application.GetResourceStream(new Uri("Files/Books/" + item.BookId + "/" + item.Text, UriKind.Relative)).Stream); 
    image.Source = gif.Frames[0].Image; 
} 
else 
{ 
    var img = new BitmapImage(new Uri("/Files/Books/" + item.BookId + "/" + item.Text, UriKind.Relative)); 
    image.Source = img; 
} 

image.SetValue(Canvas.LeftProperty, (double)item.LocationX); 
image.SetValue(Canvas.TopProperty, (double)(Application.Current.Host.Content.ActualHeight - item.LocationY)); 

image.SizeChanged += (o, e) => 
{ 
    var sender = o as ExtendedImage; 
    image.SetValue(UIElement.RenderTransformOriginProperty, new Point(0.5, 0.5)); 
}; 

image.InvalidateMeasure(); 

if (!item.Visible) 
{ 
    image.Visibility = System.Windows.Visibility.Collapsed; 
} 

ContentPanel.Children.Add(image); 

Répondre

1

Si le conteneur du Image a Height et Width, l'image doit être aussi bien. Essayez de mettre votre Image dans un Grid ou StackPanel et définir la taille explicitement.

+0

C'est contenu dans une toile et toile a la hauteur et la largeur. –

+0

Merci pour votre réponse. La taille du conteneur de Canvas était NaN. Quand je vais corriger cela, mon problème est résolu. –

+0

Pouvez-vous s'il vous plaît dites-moi comment vous avez résolu votre problème, j'ai aussi le même problème. –

3

Vous ne pouvez pas accéder à la taille de l'image avant qu'elle ne soit rendue. Et vous ne pouvez pas rendre un élément dans un Canvas, sans qu'il ait une taille explicite.

Donc, votre problème est que vous essayez d'obtenir la taille de l'image avant qu'elle ne soit réellement rendue.

Questions connexes