设置d:所有页面的DesignHeight

时间:2018-01-22 19:00:41

标签: wpf xaml

我的WPF项目包含许多加载到同一帧中的页面。我目前在每个单独文件的d:DesignHeight标记中指定d:DesignWidthPage。我想尽可能在​​一个地方指定它(如Style)。

我尝试在App.xaml中将其设置为样式。

<Style x:Key="PageStyle" TargetType="{x:Type Page}">
    <Setter Property="d:DesignHeight" Value="942" />
    <Setter Property="d:DesignWidth" Value="1264" />

页面在设计器中正确呈现,但代码无法构建:

  

错误:找不到样式属性&#39; DesignHeight&#39;在类型&#39; System.Windows.Controls.Page&#39;

如何在一个地方为多个页面设置相同的d:DesignHeightd:DesignWidth

1 个答案:

答案 0 :(得分:3)

我怕你不能。设计器属性不是真正的属性 - 它们是Xaml解析器忽略的指令。

实际上,只有在明确告诉解析器忽略它们时才能使用它们:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"

mc:Ignorable指令告诉解析器忽略给定命名空间内发生的任何查找失败。如果您尝试引用其中一个设计器属性而不将设计器名称空间添加到mc:Ignorable,则会出现编译时错误:

  

XML命名空间“http://schemas.microsoft.com/expression/blend/2008”中不存在属性“DesignWidth”。

由于这些不是真正的属性,因此您不能将它们应用于Setter,也不能以编程方式设置它们。遗憾。

附录

我花了一些时间研究在设计模式下设置宽度和高度的其他选项。我尝试了自定义附加属性,子类化Page,甚至在设计模式下覆盖了WidthHeight的默认元数据。总是,除了 WindowPage之外,我可以使每种方法适用于几乎所有控件。我怀疑这是因为设计师使用特殊代理元素显示窗口和页面的方式。

此时,我有理由相信没有办法让VS 2017 Xaml设计师合作。