Wpf 自定义框架元素调整大小以适应父元素
我正在尝试创建自定义框架元素对象。不幸的是,我不知道如何调整它的大小以适应父对象(例如边框) 我已经按照下面的方式设置了构造函数,但是没有调用SizeChanged事件(除了在最开始的时候)Wpf 自定义框架元素调整大小以适应父元素,wpf,xaml,Wpf,Xaml,我正在尝试创建自定义框架元素对象。不幸的是,我不知道如何调整它的大小以适应父对象(例如边框) 我已经按照下面的方式设置了构造函数,但是没有调用SizeChanged事件(除了在最开始的时候) 通常您必须在MeasureOverride和ArrangeOverride中执行此类代码 测量超越的示例 受保护的覆盖尺寸测量覆盖(尺寸可用尺寸) { //返回可用大小以使用容器大小 返回可用性; } 或者,您可以选择从UserControl或其他合适的容器派生元素,以完成此操作 更多关于测量和排列的信息
通常您必须在
MeasureOverride
和ArrangeOverride
中执行此类代码
测量超越的示例
受保护的覆盖尺寸测量覆盖(尺寸可用尺寸)
{
//返回可用大小以使用容器大小
返回可用性;
}
或者,您可以选择从UserControl
或其他合适的容器派生元素,以完成此操作
更多关于测量和排列的信息,请点击此处
如果要使用现有代码,应该这样做,但不推荐这样做
VisualParentChanged(DependencyObject oldParent)上受保护的覆盖无效
{
base.OnVisualParentChanged(旧父级);
如果(oldParent!=null)
(oldParent作为框架元素)。SizeChanged-=父项\u SizeChanged;
如果(父项!=null)
(父对象作为框架元素)。SizeChanged+=父对象\u SizeChanged;
}
无效父项\u SizeChanged(对象发送方,SizeChangedEventArgs e)
{
this.Width=e.NewSize.Width;
this.Height=e.NewSize.Height;
}
我尝试将基类设置为UserControl,但没有任何改变。为什么后者是个坏主意?默认情况下,
UserControl
会占用所有可用空间,如果不是这样,您是否可以发布一个可以复制相同内容的工作示例应用程序?第二,这种方法不是一个坏主意,但是当你有一个来自WPF的强大的布局框架来做这些事情时,它就变得多余了,所以不推荐使用?除非你有一些非标准的事情发生,否则没有理由在非标准的实践中发生。请澄清我的班级是空的。我的绘制方法只是绘制一个黑色矩形以供参考。我现在不想做任何事情,只是想先让最简单的部分工作。如果你需要一个矩形,就用XAML做
。WPF不是winforms。同样,除非您需要非常非标准的,否则没有理由在非标准实践中使用。WPF是关于XAML和数据绑定的,而不是过程代码。
public MyFrameworkElement()
{
this.SizeChanged += (o, e) =>
{
this.Width = e.NewSize.Width;
this.Height = e.NewSize.Height;
this.InvalidateVisual();
};
}