自定义框架元素调整大小以适合父级

时间:2014-07-02 03:29:37

标签: wpf xaml

我正在尝试创建一个自定义的Framework Element对象。不幸的是,我无法弄清楚如何调整大小以适应父级(例如边框会这样做)。

我的构造函数设置如下,但是没有调用SizeChanged事件(除了最开始)。

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

1 个答案:

答案 0 :(得分:1)

通常您必须在MeasureOverrideArrangeOverride中执行此类代码。

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