我的WPF项目包含许多加载到同一帧中的页面。我目前在每个单独文件的d:DesignHeight
标记中指定d:DesignWidth
和Page
。我想尽可能在一个地方指定它(如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:DesignHeight
和d:DesignWidth
?
答案 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
,甚至在设计模式下覆盖了Width
和Height
的默认元数据。总是,除了 Window
和Page
之外,我可以使每种方法适用于几乎所有控件。我怀疑这是因为设计师使用特殊代理元素显示窗口和页面的方式。
此时,我有理由相信没有办法让VS 2017 Xaml设计师合作。