为什么Blend会添加[d:LayoutOverrides="Height"],我需要关心吗?

25

经常在从Expression Blend 3回到Visual Studio时,我会发现Blend已经为我的XAML添加了一个"d:LayoutOverrides"属性。与ASP.NET设计器一起成长的我自然不信任任何我没有亲自编写的东西,所以我在看到它们时立即将它们删除。

我知道"d:"属性仅适用于设计时,不会影响运行时,但是有人能否提供一些关于这个属性做什么以及为什么Blend会坚持让我在我的标记中都加上它们的见解呢?

<Border d:LayoutOverrides="Height" />
2个回答

33

这只是为了让 Blend 在设计模式下知道如何显示您的 XAML。特别是,如果您有一个流体布局以填充其容器,那么 Blend 就没有明确的方法来确定您的设计应该有多高;LayoutOverrides 定义了这一点。

当您(或运行 Blend 的其他人)手动调整设计面板中的元素大小时,这些 LayoutOverride 设置条目会被添加。如果您在代码中到处都能看到它们(例如在 Border 元素中):

  1. 通常可以删除它们而不会有任何显著影响
  2. 您可能需要查看您如何使用 Blend - 具体而言,应将父容器的大小设置为适当大小(UserControl/LayoutRoot),然后根据流体布局设置子元素的大小-例如填充和边距或 * 大小

请注意,Blend 的可忽略属性会在编译时被剥离,并且不会影响您的应用程序性能。因此,尽管您可能想要删除它们以提高代码可读性,但它们不会影响应用程序的运行方式。


5
@jon,我还是不明白!我完全理解d:DesignWidth="500"的作用,但LayoutOverrides实际上并没有指定任何尺寸,那它到底是做什么的?你说“LayoutOverrides定义了这个”,但定义了什么?如果我在Blend中调整组件大小,它只会插入Height,并没有插入d:LayoutOverrides或d:DesignHeight。它似乎在TextBlock上非常普遍,但我仍然感到困惑,因为我并没有看到它在Blend中对任何东西产生影响:-/ - Simon_Weaver

2

d:LayoutOverrides

如果在运行时将属性设置为固定值,但希望在设计时覆盖它,则可以使用d:LayoutOverrides属性。所有应在设计时忽略的属性都可以列出,用分号隔开。

(来源:http://wpftutorial.net/DesigntimeVsRuntime.html)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接