- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的用户控件:
<UserControl
MaxHeight="32"
MaxWidth="32"
MinHeight="25"
MinWidth="25">
<DockPanel>
<!-- some stuff -->
</DockPanel>
</UserControl>
除了最小/最大尺寸限制之外,我还希望控件始终使用Width = Height
进行绘制。所以我覆盖 MeasureOverride
和 ArrangeOverride
:
protected override Size MeasureOverride(Size availableSize)
{
var resultSize = new Size(0, 0);
((UIElement)Content).Measure(availableSize);
var sideLength = Math.Min(((UIElement)Content).DesiredSize.Width, ((UIElement)Content).DesiredSize.Height);
resultSize.Width = sideLength;
resultSize.Height = sideLength;
return resultSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
((UIElement)Content).Arrange(new Rect(0, 0, finalSize.Width, finalSize.Height));
return finalSize;
}
我知道我必须对 UserControl 的每个子项调用 Measure
和 Arrange
。由于 DocPanel 是我的 UserControl 的唯一子级,并且(根据我的理解)存储在 UserControl 的 Content
属性中,因此我只需调用 Measure
和 Arrange
在此内容属性上。但是,不会显示 UserControl。我做错了什么?
最佳答案
根据您托管 UserControl 的方式,可能不会使用从测量阶段返回的值。如果您将其设置在带有星形行/列的网格或 DockPanel 中,那么最终的大小可能会完全不同。
您需要将类似的逻辑应用于排列阶段,因此它将有效地忽略所提供的任何额外空间。
以下代码应该可以工作,并且更简洁:
protected override Size MeasureOverride(Size availableSize) {
var desiredSize = base.MeasureOverride(availableSize);
var sideLength = Math.Min(desiredSize.Width, desiredSize.Height);
desiredSize.Width = sideLength;
desiredSize.Height = sideLength;
return desiredSize;
}
protected override Size ArrangeOverride(Size finalSize) {
var sideLength = Math.Min(this.DesiredSize.Width, this.DesiredSize.Height);
return base.ArrangeOverride(new Size(sideLength, sideLength));
}
关于重写 MeasureOverride 和 ArrangeOverride 时不绘制 WPF UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409410/
好吧,就在我认为我已经弄清楚了布局系统时,我碰壁了...... 所以我有一个带有自定义 ItemsControl 的 WPF 窗口,它的 Items 面板是一个自定义面板,每个 ItemContain
我有一个自定义面板,在调整大小时,它的 LayoutUpdated 事件和 ArrangeOverride 被调用了两次。 因此,最初 MeasureOverride 和ArrangeOverride
我正在使用 GreatMaps.NET 库 (https://greatmaps.codeplex.com/) 的面向 MVVM 的分支,但我的问题归结为使用自定义 Canvas 作为 ItemsCo
我这里的问题更多是理论性的,而不是功能性的。所以我正在寻找的是一个可以用一些文档来支持的答案。 我发现自己处于需要为 wpf 控件的子控件做一些自定义测量/安排的情况? 是否可以根据其他大小限制而不是
有人可以为这个功能提供一个简单的例子吗?我想要实现的是这样的: 当我有 1 个 child 时 - 我想全屏显示; 当我有 2 个 child 时 - 我希望具有相同的高度和宽度,并且每个 child
我有一个如下所示的用户控件: 除了最小/最大尺寸限制之外,我还希望控件始终使用Width = Height进行绘制。所以我覆盖 MeasureOverride
我正在尝试构建一个包含一个 child 的简单面板,并将其对齐到最接近的网格大小。我很难通过覆盖MeasureOverride和ArrangeOverride来弄清楚如何做到这一点。 这就是我所追求的
我一直在努力确定为什么我们的 WPF 应用程序在生产环境中的运行速度比在本地机器上慢大约 3 倍。我一直在使用我们在生产中使用的一个 Blade 来测试对设置的各种更改,以尝试获得相同的时间。我们最终
我是一名优秀的程序员,十分优秀!