问题标签 [arrangeoverride]

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 回答
3424 浏览

wpf - Panel.Children 与 Panel.InternalChildren - 有什么区别?

根据MSDN - Panel.InternalChildren 属性

从Panel派生的类 应该使用此属性,而不是Children 属性,用于内部覆盖,例如MeasureCoreArrangeCore


所以,这真的是一个两部分的问题:

  1. 如果我创建自己的面板FooPanel,它派生自Panel,我似乎无法覆盖MeasureCoreArrangeCore。我不确定为什么会出现这种说法。但是,我可以覆盖MeasureOverrideand ArrangeOverride。所以,我想知道我是否还需要InternalChildren为这两种方法使用该属性。

  2. Children财产和财产之间的真正区别是什么InternalChildren

0 投票
1 回答
787 浏览

layout - 布局系统何时调用 ArrangeOverride 和 Arrange()?

我试图了解Silverlight中的布局系统,但我真的不知道该过程是如何工作的。我知道 Measure 总是在所有措施完成之前被调用,然后arrange开始。但是这个过程究竟是什么时候开始的,我们能够控制它吗?

请不要写MSDN库链接,我已经看过了,一点都不清楚。

我的具体情况是我有一些嵌套(从和工作LinearLayouts继承一个类)但我需要大小(因为它们的大小是父级的百分比),直到所有元素都加载到树中我才能得到它,所以我调用了LayoutRoot_Loaded。它可以工作,是的,但是它完成了 3 次布局过程,这对整个系统来说效率不高......有人可以帮助或至少解释一下布局系统如何完全由程序员管理吗?:-)PanelArrangeoverrideMEasureoverriderootcontainerarrange()

0 投票
2 回答
966 浏览

wpf - wpf自定义面板

我正在考虑创建一个面板,该面板将所有子项包裹在 ViewBox 内,以便可以将它们缩小到某个统一的大小。

我不确定这是否可行,但我想我会问。我不确定这是否可能的原因是 Panel 没有与它们关联的任何 xaml。他们用代码测量和安排孩子。有小费吗?


在不够清楚之后,我想我会更具体:

我想要一个小组,因为我想安排和衡量我的孩子。

  1. 该度量找到所有子元素的平均高度/宽度。
  2. 排列将它们放入网格状图案并将它们缩放到平均高度/宽度。我不希望它们被限制,我希望它们适当地放大或缩小。

我已经让 measureoverride 函数可以找到平均高度/宽度,但我不知道如何在我的安排覆盖中缩放它们。

0 投票
1 回答
533 浏览

wpf - WPF:如何从自定义面板中“取消绘制”子项?

基本上,我有一个面板,它根据 DependencyProperty (FooProperty) 绘制其子项。

如果 FooProperty 为 true,则安排孩子;否则,不安排。第一次通过很好,但是当孩子将其 FooProperty 从 true(绘制)更改为 false(不绘制)时,该ArrangeOverride方法会跳过它并且孩子保持绘制状态。

我想而不是跳过不应该绘制的孩子,我需要一些方法来取消它们?

0 投票
1 回答
707 浏览

wpf - 为什么 ListBoxItem 在宽度改变时不调用 MeasureOverride?

好的,为了说明的目的,下面我创建了一个 的子类ListBoxItem和 的一个子类,它通过覆盖和ListBox来使用它作为它的容器。IsItemItsOwnContainerOverrideGetContainerForItemOverride

现在,当窗口首次出现时,正如预期的那样,MeasureOverride在每个ListBoxItem(使用 Infinity,Infinity)ArrangeOverride上调用,然后在每个项目上调用。

但是,当调整ListBox, only的大小时,不会ArrangeOverride调用,即使 width 属性的元数据设置为。ListBoxItemMeasureOverrideAffectsMeasure

注意:我知道我可以通过设置ScrollViewer.HorizontalScrollbarVisibility为“禁用”来解决这个问题,在这种情况下MeasureOverride会按预期调用,因为滚动设置会强制项目与列表框的宽度匹配,因此自然会重新触发。但是,我仍在试图弄清楚为什么默认情况下不调用 Measure,因为Width属性的元数据AffectsMeasure设置了标志,并且宽度正在通过ArrangeOverride步骤发生变化。

该标志是否只是对其容器的提示,并且对于放置在其中的控件,ScrollViewer它会被忽略吗?我的猜测是,除非您禁用滚动,否则控件有无限的可用区域,因此一旦测量它们,就无需再次重新测量它们。但是禁用水平滚动并且您说宽度不是无限的,因此MeasureOverride再次调用。但这只是一个猜测,尽管是合乎逻辑的。

这是可以使用的示例代码。创建一个新的 WPF 项目并将其粘贴到窗口的 CodeBehind 中并查看调试输出。接下来,设置 Horizo​​ntalScrollbarVisibility 标志,您会看到它确实被调用了。

0 投票
2 回答
1115 浏览

wpf - ContentControl 排列/测量子面板

因此,可以更轻松地更改面板的类型,将逻辑保持为缩放、平移、拖动子项,并在父 ContentControl 中实现。

安排/测量覆盖问题,拖动鼠标定位已成为地狱。似乎所有位置都被抵消了:

e.GetPosition(this.Content as Panel).X

使 Dragged Children 在左侧以巨大的偏移量移动。

Translate(Point,UIElement)

似乎对任何调用组合都没有影响:

this.Content.Translate(Point,Children);

或者

Child.Content.Translate(Point,this.Content);

既不尝试:

Offset(x,y)

在 TranslateTransform 或 HitTest 之前和之后。

类似场景的好例子:http: //www.codeproject.com/KB/WPF/zoomandpancontrol.aspx

如何修复 HitTesting/DragMove 中的拖动偏移?我到底可以在安排/测量覆盖中修复什么以使 TranslateTransform 没有 UnTranslable 偏移量?谢谢

0 投票
1 回答
327 浏览

wpf - FramworkElement 安排不放置子 FramworkElement

我有两个课程[适用于这个问题]。第一个XYAxes2,扩展FrameworkElement。它覆盖MeasureOverrideArrangeOverride试图将其唯一的孩子XAxis(也扩展FrameworkElement)放置在所需的位置。

XYAxes2(家长):

Scale是一个自定义绘制的组件。 Scale(孩子):

调试时,ActualWidth在此函数中始终是父级的宽度,而不是ArrangeOverride100 设置的宽度。但是,子级被剪裁到 指定的区域ArrangeOverride

我在这些功能之一中做错了吗?

编辑:通过插入XAxis.Measure(100,200)ArrangeOverride问题显然得到了解决。当然,每次安排无效时都不需要调用Measure(这意味着InvalidateArrange需要隐式调用InvalidateMeasure)。任何人都可以阐明这背后的原因吗?

有谁知道实际设置在哪里DesiredSizeActualWidth/Height显然它们不是由我的代码设置的)?

0 投票
2 回答
2453 浏览

wpf - WPF - IScrollInfo 实现

问题:一个带有 ItemsControl 和一些项目的窗口(比如说矩形)。窗口设置了 MinWidth 和 MinHeight(例如 300),如果矩形没有足够的空间显示以显示在 2 列中,我需要在调整窗口大小时使用它。如果在 2 列中仍然没有足够的空间来显示滚动查看器。

我尝试过: 1. 创建一个扩展的 ItemsControl:

我的 ItemsControl 作为 ItemsPanelTemplate 有一个扩展网格:

公共类 MyGrid :网格,IScrollInfo { ....IScrollInfo 实现 }

我使用这个网格认为当 ItemsControl 将 PrepareContainerForItemOverride() 时,我可以使用它来将项目拆分为两列。

这个想法是从会议中“采取”的......但我不知道下一步该做什么......我有这样的问题:当我为数据网格覆盖测量和排列时,我在 DataGrid 中设置了项目的位置,但是然后它被称为 PrepareContainerForItemOverride()...然后呢?我应该计算我应该做的行数?但是如果然后我再次调整窗口大小... PrepareContainerForItemOverride() 将不会被调用...

这个问题已经解决了我......如果你们中的一些人有一个线索,请给我一个线索。感谢你们!

0 投票
1 回答
2223 浏览

c# - MeasureOverride 和 ArrangeOverride 没有被调用

我正在使用来自WPFExtensions的 ZoomControl 。源代码在这里

我用 OnRender 方法添加了装饰器:

使用 ZoomControl xaml:

应用装饰器:

当我拖动图像控件时,我的装饰器没有移动。

我尝试过覆盖 ArrangeOverride 和 MeasureOverride:

但是没有效果。输出窗口中没有任何内容,并且装饰器没有移动。

当我放大时 - 一切都很好。Adorner 会根据图像控件的变化改变它的位置。

问题出在我的代码中还是在 ZoomControl 中?

示例应用程序在这里

解决方案:

我不得不将我的画布放入 AdornerDecorator:

说明在这里

0 投票
0 回答
177 浏览

wpf - RenderTransform 导致无效排列

所有文档似乎都表明设置 RenderTransform 不应该影响排列。但这并不是我所看到的行为。

我对控件布局有一个奇怪的要求。我想尽可能多地保留 wpf 的布局系统,所以我创建了一个继承 Decorator 的元素。我有一个附加属性来标记我感兴趣的元素。在排列期间,我调用了基本的 ArrangeOverride 方法,该方法用于布局使用正常过程取出元素。接下来,我浏览带有附加属性的控件,并使用渲染转换,将控件重新定位到我想要它们的位置。

在我使用项目控件之前,所有这些都可以正常工作。分配 RenderTransform 导致排列无效,并且我的排列方法被重复调用。文档似乎建议设置 RenderTransform 对 Arrange 没有影响。