我正在尝试创建一个自定义的Framework Element对象。不幸的是,我无法弄清楚如何调整大小以适应父级(例如边框会这样做)。
我的构造函数设置如下,但是没有调用SizeChanged事件(除了最开始)。
public MyFrameworkElement()
{
this.SizeChanged += (o, e) =>
{
this.Width = e.NewSize.Width;
this.Height = e.NewSize.Height;
this.InvalidateVisual();
};
}
答案 0 :(得分:1)
通常您必须在MeasureOverride
和ArrangeOverride
中执行此类代码。
MeasureOverride的示例
protected override Size MeasureOverride(Size availableSize)
{
//return the available size to use the container size
return availableSize;
}
您可以选择从UserControl
或其他合适的容器中派生您的元素,以便为您完成此任务。
有关措施的更多信息并在此安排
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.arrangeoverride
如果您想使用现有代码,应该这样做,但不建议使用
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;
}