/ / Élément de cadre personnalisé redimensionné pour s'adapter au parent - wpf, xaml

Élément de structure personnalisée redimensionné pour s'adapter au parent - wpf, xaml

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 № 1

gé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;
}