I Une grille sur mon Silverlight Control, je ajoute de manière programmable une toile et dans la toile, je charge et affichant une image.
J'ajoute également une rotation à la toile. Le problème est que par défaut, le centrex et la centrale de la rotation est le haut à gauche de la toile. Ce que je veux, c'est que la rotation se produise autour du centre de la toile. p>
Pour ce faire, j'ai essayé de définir le centrex et la centréy de la rotation vers les images Même à l'aide de l'événement DownloadProgress sur l'image ne semble pas garantir que lawidth et l'actualitéHeight sont peuplés et ne l'utilisent pas non plus ..Dispatcher.begininvoke () .. . P> réelWidth code> / 2 et
actuelheight code> / 2, mais je J'ai découvert que
réelWidth code> et
actuelHeight code> ne sont pas toujours peuplés, du moins pas tout de suite. Comment puis-je les forcer à me mettre à jour? P>
Image imgTest = new Image();
Canvas cnvTest = new Canvas();
Uri uriImage = new Uri("myurl", UriKind.RelativeOrAbsolute);
System.Windows.Media.Imaging.BitmapImage bmpDisplay = new System.Windows.Media.Imaging.BitmapImage(uriImage);
bmpDisplay.DownloadProgress += new EventHandler<System.Windows.Media.Imaging.DownloadProgressEventArgs>(this.GetActualDimensionsAfterDownload);
imgTest.Source = bmpDisplay;
imgTest.Stretch = Stretch.Uniform;
imgTest.HorizontalAlignment = HorizontalAlignment.Center;
imgTest.VerticalAlignment = VerticalAlignment.Center;
cnvTest.Children.Add(imgTest);
this.grdLayout.Children.Add(imgTest);
this.Dispatcher.BeginInvoke(new Action(GetActualDimensions));
3 Réponses :
Pour mettre à jour le ActualWidth code> et
d'un code> d'un
FramewradElement code> Vous devrez appeler
updateLayout code>. p >
Travaillé pour moi aussi. Merci.
Malheureusement, Calling UpdateLayout ne fonctionne pas toujours selon votre situation.
J'ai eu la chance de faire quelque chose comme: p> mais même ce échoue trop souvent. P> p>
La méthode la plus fiable que j'ai trouvée est d'utiliser dépendancePropertyDescriptor fort> addvaluchangé strong> d'auditeurs de réelwidth strong> et actuelHeight strong> au lieu de DependencyPropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, typeof(StackPanel));
if (descriptor != null)
{
descriptor.AddValueChanged(uiPanelRoot, DrawPipelines_LayoutUpdated);
}
descriptor = DependencyPropertyDescriptor.FromProperty(ActualHeightProperty, typeof(StackPanel));
if (descriptor != null)
{
descriptor.AddValueChanged(uiPanelRoot, DrawPipelines_LayoutUpdated);
}
void DrawPipelines_LayoutUpdated(object sender, EventArgs e)
{
// Point point1 = elementInstrumentSampleVial.TranslatePoint(
// new Point(11.0, 15.0), uiGridMainInner);
}
DépendancePropertyDescriptor code> n'est pas disponible en Silverlight.
Vous pouvez essayer d'écouter la mise en forme ou créer un délai d'utilisation avec Disternmertimer, mais cela ne garantirait probablement pas les résultats