听起来应该很简单。我在XAML中按照正常方式(即使用“添加新项...”)声明了一个Page
,并且它有一个自定义属性。我想在与页面关联的XAML中设置该属性。
尝试以与设置任何其他属性相同的方式执行此操作不起作用,出于我理解但不知道如何解决的原因。为了让我们有一些具体的谈论内容,这里是一些(无效的)XAML。我已经尽可能地将所有内容缩减了-最初有设计师大小等属性,但我相信这些属性与我所要做的无关。
<Page x:Class="WpfSandbox.TestPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MyProperty="MyPropertyValue">
</Page>
以及相应的代码后台:
using System.Windows.Controls;
namespace WpfSandbox {
public partial class TestPage : Page {
public TestPage() {
InitializeComponent();
}
public string MyProperty { get; set; }
}
}
错误信息:
Error 1:属性 'MyProperty' 在 XML 命名空间'http://schemas.microsoft.com/winfx/2006/xaml/presentation'中不存在。第4行第7个位置。
现在我知道为什么会失败了:元素的类型是 Page
,而 Page
没有一个名为 MyProperty
的属性。 这个属性只在 TestPage
中声明...它是由 x:Class
属性指定的,而不是元素本身指定的。据我所知,这种配置是 XAML 处理模型所需的(例如 Visual Studio 集成等)。
我怀疑我可以通过依赖属性来处理这个问题,但那感觉有点大题小做。我也可以使用现有属性(例如 DataContext
),然后在代码中将其值复制到自定义属性中,但那样会很难看。
上面是一个 WPF 示例,但我认为相同的答案也适用于 Silverlight。我对两者都感兴趣 - 所以如果您发布一个您知道只适用于其中一种的答案,我会非常感激您在答案中指出 :)
当有人发布一个绝对简单的解决方案时,我准备踢自己的后腿...
Page
元素中,"MyProperty" 是否需要一个 xml 命名空间?例如 "x:MyProperty"?(不是字面意思,但类似的)。关键在于它不是在该命名空间中,因此它会检查哪些其他命名空间? - Neil Barnwell