问题标签 [measureoverride]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2776 浏览

wpf - 使用 double.PositiveInfinity WPF 测量控制

我正在开发一个具有自定义面板的自定义控件,并且在自定义面板内部我有一个小而简单MeasureOverride的方法,可以将大小传递double.PositiveInfinity给它的子MeasureOverride方法。自定义面板应该负责布局,它应该根据窗口大小使子项变大或变小。

如果您处理过控件,那么您应该知道 wpf 布局系统是如何工作的,并且基本上每个孩子都会调用 MeasureOverride,后者会调用孩子的孩子的 MeasureOverride 等等。

现在的问题是,当我调整窗口大小时,自定义面板确实会收到标志以再次进行测量,因此MeasureOverride会再次调用它,但这次在将double.PositiveInfitinty大小传递给其子级时,MeasureOverride根本不会调用子级(但该方法应根据 WPF 布局系统的定义调用)。为什么呢?我一直认为,当我打电话MeasureOverride给父母时,孩子们也会被迫采取措施。

显然我错了,所以有人可以解释一下控制/孩子如何知道何时再次测量?

顺便说一句,我将尺寸传递double.PositiveInfinity给孩子们,告诉他们根据需要占用尽可能多的空间。

代码:

代码很简单。我不明白为什么孩子们不再被测量。对不起,如果我在代码中拼错了一些东西。

0 投票
2 回答
1452 浏览

wpf - WPF - 自定义面板大小到内容

我的面板尝试执行类似于 UniformGrid 的操作,除了 ItemContainerWidth (40.0) 和 ItemContainerHeight (20.0) 依赖属性之外,它还有一个 ColumnNumber 属性。

我希望我的面板根据它的内容调整大小。

我的 MesureOverride :

我的安排覆盖:

我的面板的 ActualWidth 和 Height 等于 finalSize ,我希望面板的尺寸是从 MeasureOvride (constraint) 返回的尺寸,

如果我强制我的面板在屏幕上的位置不同,我只想让我的面板调整到它的内容,如 WrapPanel 或 StackPanel,

最终尺寸

最终尺寸

用于测试目的的约束大小 (100,100)

有约束大小

我对面板的使用:XAML:

0 投票
2 回答
1411 浏览

wpf - MeasureOverride 并不总是在子属性更改时调用

我写了一个类似于内置 StackPanel 的面板。除了一个小问题,我几乎可以正常工作:

更改子项的布局属性并不总是会导致调用面板的 MeasureOverride 和 ArrangeOverride。当孩子的 Visibility 属性发生变化时,它们总是被调用,而不是在 Width 和 Height 属性发生变化时被调用。

我还没有设法在一个足够小以适合包含在 StackOverflow 上的问题中的示例中重现此行为:但是由于它在我制作的简单示例中运行良好,我知道我必须在我的实际面板中做一些可以避免的事情.

所以我的问题是:在哪些情况下元素在更改与大小相关的属性时不会使其父项测量无效?

我也标记了这个 wpf(我使用了 Silverlight)以拥有更广泛的受众 - 我怀疑这将同样适用于两个 xaml 实现。

0 投票
1 回答
392 浏览

wpf - WPF:在动画期间仅调用一次测量/排列

我正在开发一个自定义的类似网格的面板,其中一个元素可以缩放。首先,所有元素都具有相同的大小。如果一个应该被缩放,它会得到两倍于以前的大小,其余元素均匀地填充剩余空间(因此,除了与缩放元素在同一行或列中的元素之外,所有元素的高度和宽度都会变小,在同一行获得更小的宽度和缩放的高度等)。

一切正常,直到我为缩放添加动画。

我正在计算测量过程中每个元素的大小,起初我用计算出的大小来测量每个元素。元素本身的大小为 NaN,直到它们被缩放。我通过将它们设置为最终大小来缩放它们,然后开始从旧到新的双重动画。

但是,当我添加动画时,仅在第一个动画步骤中调用了测量和排列。当我尝试使用 availableSize 或无限大小来测量元素时,动画效果很好,但是元素在它们变小的维度上没有正确调整大小。

有谁知道如何解决其中任何一种行为?

问候托拜厄斯

编辑:动画代码:

0 投票
2 回答
580 浏览

wpf - 为什么 ArrangeOverride 会重新计算最终大小

对我自己来说,如果MeasureOverride计算FrameworkElement的大小,而ArrangeOverride 只是定位子元素,那将是合乎逻辑的。但是ArrangeOverride不仅仅排列子元素。它还会再次计算我不明白的FrameworkElement的大小。为什么MeasureOverride不能计算最终大小,仅此而已?

0 投票
2 回答
5347 浏览

c# - WPF MeasureOverride 和 ArrangeOverride

我的问题更多是理论上的问题,而不是功能性的。所以我正在寻找的是一个可以用一些文档来支持的答案。

我发现自己需要为 wpf 控件的子项进行一些自定义测量/安排?

  1. 是否可以根据其他尺寸限制而不是作为参数接收的尺寸来测量孩子。
  2. 我想要实现的一些伪代码:

    /li>

是否应该将所有逻辑都存在于 MeasureOverride 中,或者我应该只调用度量,并将接收到的大小作为所有子项的参数,然后在 ArrangeOverride 中执行逻辑?谢谢!

0 投票
0 回答
393 浏览

wpf - 如何使用 MeasureOverride 方法将 DesiredSize 设置为大于 ConstraintSize

我有一个自定义控件,它根据用户配置加载内部控件集。内部控件集可以包含两种类型的控件 - 其中一些具有自定义附加的布尔属性,这表示内部控件只能占用它自己想要的空间(默认提供 false 值)或控件可以占用所有剩余空间(true 值)。

在外部控件中,MeasureOverride 方法被覆盖以及在内部控件中。外部控件对所有具有附加属性的默认值的子控件调用 Measure 方法,并将 double.InfinitePositive 值作为约束高度。附加属性等于 true 的子级以(剩余空间/附加属性等于 true 的子级数)作为约束大小高度进行测量。

一切都按预期工作。内部控件已正确测量,但如果约束高度小于内部控件计算高度,则会出现问题。在这种情况下,在内部控件上调用 measure 之后 child.DesiredSize.Height 等于约束并且 child.ActualHeight 等于子 MeasureOverride 输出大小高度值。

我怎么能对外部控件说孩子的期望大小是 child.MeasureOverrride 方法的输出值?

代码示例在这里:外部控件的MeasureOverride方法:

0 投票
0 回答
240 浏览

c# - ContentPresenter 父级的 WPF Measureoverride 触发器

我有一个深层嵌套的 WPF 控件,如下所示

出于某种原因,当我更改内容演示者的内容时,会触发 CustomControl 的 measureoverride。我想知道这是否正常,您将如何抑制要触发的measureoveride。我已经尝试通过将 AffectsMeasure 设置为 false 来继承 Content Presenter 并覆盖框架元数据,但出于某种原因,这些标志是 or'ed 并且未设置为 false。

我已经知道高度和宽度,并且不希望调用度量覆盖。

我知道如何知道是什么触发了度量覆盖。

谢谢。任何帮助深表感谢。

0 投票
1 回答
75 浏览

wpf - Why doesn't start MeasureOverride?

I have two custom controls for displaying collections of comments and signatures. Each of these controls has a button for changing display style - show entire collection or just first 4 elements.

When I put these controls in a default WrapPanel - they work fine: expand or collapse depending on user's actions. In my own custom WrapPanel with new ArrangeOverride function they also work fine.

Now I need WrapPanel with option "LastChildFill" (I found example here) and with custom "WrapDirection" (similar to FlowDirection). First or last element in WrapPanel have to fill all remaining space while it's more than MinWidth of the element. So I've created third WrapPanel with custom MeasureOverride and ArrangeOverride. And it works as I want, but when I change control display style a collection inside a control changes, but MeasureOverride in my WrapPanel doesn't start until I change window size.

Update: MeasureOverride doesn't start for expanding first or last element which fills remaining space. Collapsing for this element works fine.

I don't understand what thing I have broken with custom MeasureOverride?

Update 2: I fugured that my problem is similar to this: MeasureOverride not always called on children's property changes.

And attach MeasureOverride code.

0 投票
1 回答
206 浏览

.net - WPF:MeasureOverride 有副作用?

情况:

我正在尝试为StickyInfoPanel垂直布局的两个子项创建一个面板类。两项中较低的一项应为 100px 的高度。上面的项目将消耗剩余的总可用高度。

上面的项目是一个 ScrollView,里面有一个 stackpanel 和两个子项(upper1 和 upper2)。因此,只要堆栈面板没有足够的空间,就会出现垂直滚动条,如下图所示:

在此处输入图像描述

问题:

尽管在排列阶段将正确的高度传递给上部项目,但其结果高度更高,因此滚动条不会显示。(见第二张截图)

只有当窗口进一步缩小,只有upper1可以显示时,才会出现滚动条。但它的向下按钮仍然消失(见第三张截图)

奇怪的是,当将正确的所需高度传递给 from 的项目时MeasureOverride,一切都按预期工作。

据我了解,MeasureOverride 应该没有副作用,但显然不是。谁能解释一下,我在这里缺少什么?

在此处输入图像描述

在此处输入图像描述

XAML:

面板类: