影响测量或影响排列

2023-12-14

我正在创建自定义控件,如果依赖项属性之一发生更改,我需要更新布局。我可以使用FrameworkMetadataProperty.AffectsMeasure or FrameworkMetadataProperty.AffectsArrange.

Q.1- 我很困惑该使用哪一个。

此外,我还可以使用 UpdateLayout 和 InvalidateVisual 方法来更新 UI。

Q.2- 所有这 4 个东西看起来都很相似,但我很困惑何时使用哪一个?


一、设置的区别框架属性元数据选项调用 UpdateLayout 或 InvalidateVisual 方法是显而易见的。在后一种情况下,您在控制代码中调用这些方法,而在前一种情况下,框架将调用适当的方法。

和...之间的不同AffectsMeasure and AffectsArrange只是导致调用UIElement.InvalidateMeasure(“影响布局的测量通道”),另一个结果是调用UIElement.InvalidateArrange(“影响布局的排列通道”)。

从注释中可以清楚地看出差异UIElement.Measure:

当布局首次实例化时,它总是会收到 Measure 调用 在安排之前。然而,在第一次布局之后,它可能会收到 没有 Measure 的 Arrange 调用;当财产 仅影响排列更改(例如对齐),或者当 父级收到一个没有测量的安排。 Measure 调用将 自动使 Arrange 调用无效。

以及来自中的备注UIElement.InvalidateMeasure:

调用该方法内部也会调用InvalidateArrange,有 无需连续调用InvalidateMeasure和InvalidateArrange


更新:有关UpdateLayout和InvalidateVisual之间的区别,请参阅中的备注更新布局:

调用此方法时,IsMeasureValid false 或 IsArrangeValid false 的元素 将调用特定于元素的 MeasureCore 和 ArrangeCore 方法,这会强制 布局更新,所有计算的尺寸都将得到验证。

如果布局未更改,或者如果 布局的排列和测量状态均无效。 但是,如果布局在任一方面都无效,则 UpdateLayout 调用 将重做整个布局。因此,您应该避免致电 在元素中每次增量和微小更改后更新布局 树。布局系统将在延迟中执行元素布局 方式,使用平衡性能和货币的算法,以及 使用加权策略推迟对根的更改,直到所有子项 元素有效。您应该仅在以下情况下调用 UpdateLayout 绝对需要更新尺寸和位置,并且只有在您 确保对您控制的属性进行的所有更改都可能 影响布局完成。

and in 无效视觉:

该方法内部调用InvalidateArrange。

通常不会从应用程序代码中调用此方法。这 WPF 框架级布局系统自行处理更改 元素的视觉树,并且将调用等效的 必要时可以使用此方法。调用这个方法是必要的 仅适用于高级场景。一种这样的高级场景是,如果您是 为依赖属性创建 PropertyChangedCallback 不在仍然存在的 Freezable 或 FrameworkElement 派生类上 更改时会影响布局。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

影响测量或影响排列 的相关文章

随机推荐

  • 了解 printf 的隐式转换

    C99 标准区分隐式和显式类型转换 6 3 转换 我猜想 但找不到 当目标类型比源类型具有更高的精度并且可以表示其值时 会执行隐式转换 这就是我认为从 INT 到 DOUBLE 会发生的情况 鉴于此 我看一下下面的例子 include
  • 如何使用 AngularJS/Ionic 作为 Backbone/Cordova 项目的一部分?

    我是 AngularJS Ionic 的新手 所以我请求你的帮助 给我们一些关于如何将 AngularJS Ionic 添加到 Backbone 项目的一部分 我们手头上有一个项目 是基于 Cordova 的 Backbone 框架构建的
  • 使用窗口迭代列表

    假设我们有这个列表 L 1 2 3 4 5 6 7 8 n 我们希望通过列表中包含 3 个元素的窗口获得此结果 l1 1 2 3 l2 2 3 4 l3 3 4 5 l4 4 5 6 l6 5 6 7 l7 6 7 8 直到我们迭代数组 并
  • OpenCV CascadeClassifier 错误

    我正在尝试通过网络摄像头进行人脸检测 但出现错误 级联分类器错误 经过一些测试 我发现这行代码产生错误 CascadeClassifier face cascade new CascadeClassifier 我得到的错误是 Excepti
  • 用指针反转 C 中的字符串文字[重复]

    这个问题在这里已经有答案了 我正在尝试使用指针反转字符串文字 通过我的代码收到 SIGSEGV 信号 head tail line char reverse char input int n char temp char head inpu
  • Google Appengine 每日预算未反映在配额中

    亲爱的 AppEngine 人员 我知道所有 AppEngine 支持已转移到 StackOverflow 如果我弄错了 那么很抱歉在这里发布此内容 我有一个非常严重的问题 希望您能帮助我解决 昨天 我在我的应用程序 friendbazaa
  • 如何通过java POI api从Excel工作表中删除所有公式?

    我们可以通过 cell setCellFormula null 从一个单元格中删除公式 但如果我想让整个表格公式免费 See Apache POI 站点这完全回答了你的问题
  • 如何在 PHP 中将一个图像包含在另一个图像中?

    如何在 PHP 中将一个图像包含在另一个图像中 我想像 twitterbackgrounds com 个性化背景那样做到这一点 有一张主图像 我们可以上传四张个人图像 之后它将显示为主图像的水印 我自己从来没有用过GD 但是看看手册中的示例
  • UWSGI 杀死工人的速度太快

    我在我的 web 应用程序中遇到了一个错误 该错误已经工作了一年多了 当我在新实例上切换到 UWSGI 以加快速度时 我遇到了这个错误 我的应用程序有 快速添加 模式窗口 允许用户将新客户添加到数据库中 并立即转到该用户的购物车 所以 该模
  • 在 VBA 中使用 Unicode 文件名(使用 Dir、FileSystemObject 等)

    I am 迭代通过文件夹中的文件 这意味着我不知道文件夹中的名称 并且有一个带有波兰语的文件 特点 The Dir函数将其转换为l这意味着以后无法找到该文件名 我已将要为其分配 dir 值的 var 声明为字符串 我也尝试过 FSO 和 g
  • 按特定键对多维数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个数组 Array 0 gt stdClass Object user id gt 1 ID gt 1 user login gt admin display name gt admin user emai
  • 将每条记录的所有列连接成一个条目

    我正在尝试将表的记录提取到 csv 文件中 SQL 查询很简单 SELECT FROM MY TABLE NAME 给出了假设的记录集 A B C D E F G H I J K L 我想要的是一个记录集 其中所有列都连接在一起 例如 A
  • PHP:将逗号分隔的值对字符串转换为数组

    我有逗号分隔的值对 我想将其转换为 php 中的关联数组 例子 Age 30 Weight 80 Height 180 转换成 Echo obj Weight 80 我的值没有用引号括起来有什么区别吗 我是说 重量 80 VS 重量 80
  • 设置scendantFocusability=“blocksDescendants”后,列表视图行中的文本视图无法单击

    我为列表视图编写了自定义项目布局 该布局有许多小部件 有些小部件有自己的点击监听器 当我单击该行时 有时列表视图的 onListItemClick 起作用 但有时不起作用 经过我一段时间的搜索 我找到了一种方法 设置机器人 descenda
  • 当游乐场被禁用时,apollo-server 返回缺少 GET 查询

    当我效仿的时候production aka playground is disabled 然后我回到我的根 http localhost 9000 我收到以下回复 400 Bad Request GET query missing 有没有办
  • 将当前类作为返回类型注释[重复]

    这个问题在这里已经有答案了 在 python 3 中 我可以创建参数并返回类型注释 例子 class Graph def init self V int E int edges list pass classmethod def fromf
  • 如何创建带有列标题和行标题的 UICollectionView?

    我想创建一个如下所示的 UICollectionView 它不可滚动或可编辑 我目前想知道如何为此编写布局 我猜它不会是的子类UICollectionViewFlowLayout 我可以想到很多方法 但很好奇是否有任何 正确 的方法 这些单
  • 为什么 PHPUnit 代码覆盖率不报告未调用的函数?

    我正在尝试获取我的一个项目的代码覆盖率 但未调用的函数和类不会纳入覆盖率计算 当大块代码被忽略时 很难看出哪些内容 很多 没有被覆盖 在下图中 我希望前三个函数的主体以红色突出显示 至少在执行的函数中未执行的行显示为红色 无论如何 我正在使
  • 如何从ContentView获取ContentPage的BindingContext?

    我有以下 Contentpage content 我在其中设置了某些绑定上下文
  • 影响测量或影响排列

    我正在创建自定义控件 如果依赖项属性之一发生更改 我需要更新布局 我可以使用FrameworkMetadataProperty AffectsMeasure or FrameworkMetadataProperty AffectsArran