/ / Rozmiar niestandardowego elementu struktury zmienia się w celu dopasowania do elementu nadrzędnego - wpf, xaml

Niestandardowy element ramki zmienia rozmiar, aby pasował do elementu nadrzędnego - wpf, xaml

Próbuję utworzyć niestandardowy obiekt Framework Framework. Niestety, nie mogę wymyślić, jak zmienić jego rozmiar, aby dopasować do elementu nadrzędnego (takiego jak na przykład obramowanie).

Mam konstruktora skonfigurowanego jak poniżej, ale zdarzenie SizeChanged nie jest wywoływane (z wyjątkiem samego początku).

public MyFrameworkElement()
{
this.SizeChanged += (o, e) =>
{
this.Width = e.NewSize.Width;
this.Height = e.NewSize.Height;
this.InvalidateVisual();
};
}

Odpowiedzi:

1 dla odpowiedzi № 1

zwykle musisz zrobić taki kod w MeasureOverride i ArrangeOverride.

przykład dla MeasureOverride

protected override Size MeasureOverride(Size availableSize)
{
//return the available size to use the container size
return availableSize;
}

opcjonalnie możesz zdecydować się na swój element UserControl lub inny odpowiedni pojemnik, aby zrobić to za Ciebie.

więcej informacji na temat miary i ustalenia tutaj

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.arrangeoverride

jeśli chcesz użyć istniejącego kodu, należy to zrobić, ale nie jest to zalecane

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