问题标签 [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.
wpf - Panel.Children 与 Panel.InternalChildren - 有什么区别?
根据MSDN - Panel.InternalChildren 属性:
从Panel派生的类 应该使用此属性,而不是Children 属性,用于内部覆盖,例如MeasureCore 和ArrangeCore。
所以,这真的是一个两部分的问题:
如果我创建自己的面板
FooPanel
,它派生自Panel
,我似乎无法覆盖MeasureCore
或ArrangeCore
。我不确定为什么会出现这种说法。但是,我可以覆盖MeasureOverride
andArrangeOverride
。所以,我想知道我是否还需要InternalChildren
为这两种方法使用该属性。Children
财产和财产之间的真正区别是什么InternalChildren
?
layout - 布局系统何时调用 ArrangeOverride 和 Arrange()?
我试图了解Silverlight中的布局系统,但我真的不知道该过程是如何工作的。我知道 Measure 总是在所有措施完成之前被调用,然后arrange
开始。但是这个过程究竟是什么时候开始的,我们能够控制它吗?
请不要写MSDN库链接,我已经看过了,一点都不清楚。
我的具体情况是我有一些嵌套(从和工作LinearLayouts
继承一个类)但我需要大小(因为它们的大小是父级的百分比),直到所有元素都加载到树中我才能得到它,所以我调用了LayoutRoot_Loaded。它可以工作,是的,但是它完成了 3 次布局过程,这对整个系统来说效率不高......有人可以帮助或至少解释一下布局系统如何完全由程序员管理吗?:-)Panel
Arrangeoverride
MEasureoverride
rootcontainer
arrange()
wpf - wpf自定义面板
我正在考虑创建一个面板,该面板将所有子项包裹在 ViewBox 内,以便可以将它们缩小到某个统一的大小。
我不确定这是否可行,但我想我会问。我不确定这是否可能的原因是 Panel 没有与它们关联的任何 xaml。他们用代码测量和安排孩子。有小费吗?
在不够清楚之后,我想我会更具体:
我想要一个小组,因为我想安排和衡量我的孩子。
- 该度量找到所有子元素的平均高度/宽度。
- 排列将它们放入网格状图案并将它们缩放到平均高度/宽度。我不希望它们被限制,我希望它们适当地放大或缩小。
我已经让 measureoverride 函数可以找到平均高度/宽度,但我不知道如何在我的安排覆盖中缩放它们。
wpf - WPF:如何从自定义面板中“取消绘制”子项?
基本上,我有一个面板,它根据 DependencyProperty (FooProperty) 绘制其子项。
如果 FooProperty 为 true,则安排孩子;否则,不安排。第一次通过很好,但是当孩子将其 FooProperty 从 true(绘制)更改为 false(不绘制)时,该ArrangeOverride
方法会跳过它并且孩子保持绘制状态。
我想而不是跳过不应该绘制的孩子,我需要一些方法来取消它们?
wpf - 为什么 ListBoxItem 在宽度改变时不调用 MeasureOverride?
好的,为了说明的目的,下面我创建了一个 的子类ListBoxItem
和 的一个子类,它通过覆盖和ListBox
来使用它作为它的容器。IsItemItsOwnContainerOverride
GetContainerForItemOverride
现在,当窗口首次出现时,正如预期的那样,MeasureOverride
在每个ListBoxItem
(使用 Infinity,Infinity)ArrangeOverride
上调用,然后在每个项目上调用。
但是,当调整ListBox
, only的大小时,不会ArrangeOverride
调用,即使 width 属性的元数据设置为。ListBoxItem
MeasureOverride
AffectsMeasure
注意:我知道我可以通过设置
ScrollViewer.HorizontalScrollbarVisibility
为“禁用”来解决这个问题,在这种情况下MeasureOverride
会按预期调用,因为滚动设置会强制项目与列表框的宽度匹配,因此自然会重新触发。但是,我仍在试图弄清楚为什么默认情况下不调用 Measure,因为Width
属性的元数据AffectsMeasure
设置了标志,并且宽度正在通过ArrangeOverride
步骤发生变化。
该标志是否只是对其容器的提示,并且对于放置在其中的控件,ScrollViewer
它会被忽略吗?我的猜测是,除非您禁用滚动,否则控件有无限的可用区域,因此一旦测量它们,就无需再次重新测量它们。但是禁用水平滚动并且您说宽度不是无限的,因此MeasureOverride
再次调用。但这只是一个猜测,尽管是合乎逻辑的。
这是可以使用的示例代码。创建一个新的 WPF 项目并将其粘贴到窗口的 CodeBehind 中并查看调试输出。接下来,设置 HorizontalScrollbarVisibility 标志,您会看到它确实被调用了。
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 偏移量?谢谢
wpf - FramworkElement 安排不放置子 FramworkElement
我有两个课程[适用于这个问题]。第一个XYAxes2
,扩展FrameworkElement
。它覆盖MeasureOverride
并ArrangeOverride
试图将其唯一的孩子XAxis
(也扩展FrameworkElement
)放置在所需的位置。
XYAxes2
(家长):
Scale
是一个自定义绘制的组件。
Scale
(孩子):
调试时,ActualWidth
在此函数中始终是父级的宽度,而不是ArrangeOverride
100 设置的宽度。但是,子级被剪裁到 指定的区域ArrangeOverride
。
我在这些功能之一中做错了吗?
编辑:通过插入XAxis.Measure(100,200)
,ArrangeOverride
问题显然得到了解决。当然,每次安排无效时都不需要调用Measure
(这意味着InvalidateArrange
需要隐式调用InvalidateMeasure
)。任何人都可以阐明这背后的原因吗?
有谁知道实际设置在哪里DesiredSize
(ActualWidth/Height
显然它们不是由我的代码设置的)?
wpf - WPF - IScrollInfo 实现
问题:一个带有 ItemsControl 和一些项目的窗口(比如说矩形)。窗口设置了 MinWidth 和 MinHeight(例如 300),如果矩形没有足够的空间显示以显示在 2 列中,我需要在调整窗口大小时使用它。如果在 2 列中仍然没有足够的空间来显示滚动查看器。
我尝试过: 1. 创建一个扩展的 ItemsControl:
我的 ItemsControl 作为 ItemsPanelTemplate 有一个扩展网格:
公共类 MyGrid :网格,IScrollInfo { ....IScrollInfo 实现 }
我使用这个网格认为当 ItemsControl 将 PrepareContainerForItemOverride() 时,我可以使用它来将项目拆分为两列。
这个想法是从会议中“采取”的......但我不知道下一步该做什么......我有这样的问题:当我为数据网格覆盖测量和排列时,我在 DataGrid 中设置了项目的位置,但是然后它被称为 PrepareContainerForItemOverride()...然后呢?我应该计算我应该做的行数?但是如果然后我再次调整窗口大小... PrepareContainerForItemOverride() 将不会被调用...
这个问题已经解决了我......如果你们中的一些人有一个线索,请给我一个线索。感谢你们!
c# - MeasureOverride 和 ArrangeOverride 没有被调用
我正在使用来自WPFExtensions的 ZoomControl 。源代码在这里。
我用 OnRender 方法添加了装饰器:
使用 ZoomControl xaml:
应用装饰器:
当我拖动图像控件时,我的装饰器没有移动。
我尝试过覆盖 ArrangeOverride 和 MeasureOverride:
但是没有效果。输出窗口中没有任何内容,并且装饰器没有移动。
当我放大时 - 一切都很好。Adorner 会根据图像控件的变化改变它的位置。
问题出在我的代码中还是在 ZoomControl 中?
示例应用程序在这里。
解决方案:
我不得不将我的画布放入 AdornerDecorator:
说明在这里。
wpf - RenderTransform 导致无效排列
所有文档似乎都表明设置 RenderTransform 不应该影响排列。但这并不是我所看到的行为。
我对控件布局有一个奇怪的要求。我想尽可能多地保留 wpf 的布局系统,所以我创建了一个继承 Decorator 的元素。我有一个附加属性来标记我感兴趣的元素。在排列期间,我调用了基本的 ArrangeOverride 方法,该方法用于布局使用正常过程取出元素。接下来,我浏览带有附加属性的控件,并使用渲染转换,将控件重新定位到我想要它们的位置。
在我使用项目控件之前,所有这些都可以正常工作。分配 RenderTransform 导致排列无效,并且我的排列方法被重复调用。文档似乎建议设置 RenderTransform 对 Arrange 没有影响。