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 № 1zwykle 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;
}