J'essaie de créer un objet Framework Framework personnalisé. Malheureusement, je n'arrive pas à comprendre comment le redimensionner pour l'adapter au parent (comme le ferait une bordure par exemple).
J'ai le constructeur configuré comme ci-dessous mais l'événement SizeChanged n'est pas appelé (sauf au tout début).
public MyFrameworkElement()
{
this.SizeChanged += (o, e) =>
{
this.Width = e.NewSize.Width;
this.Height = e.NewSize.Height;
this.InvalidateVisual();
};
}
Réponses:
1 pour la réponse № 1généralement vous devez faire un tel code MeasureOverride
et ArrangeOverride
.
exemple pour MeasureOverride
protected override Size MeasureOverride(Size availableSize)
{
//return the available size to use the container size
return availableSize;
}
vous pouvez éventuellement choisir de dériver votre élément de UserControl
ou un autre conteneur approprié pour que cela soit fait pour vous.
plus d'infos sur mesure et arranger ici
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.arrangeoverride
si vous voulez utiliser votre code existant, cela devrait être fait, mais pas recommandé
protected override void OnVisualParentChanged(DependencyObject oldParent)
{
base.OnVisualParentChanged(oldParent);
if (oldParent != null)
(oldParent as FrameworkElement).SizeChanged -= Parent_SizeChanged;
if (Parent != null)
(Parent as FrameworkElement).SizeChanged += Parent_SizeChanged;
}
void Parent_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.Width = e.NewSize.Width;
this.Height = e.NewSize.Height;
}