这听起来应该很简单。我有一个在XAML中以正常方式声明的页面(即“添加新项目…”),它有一个自定义属性。我想在与页面相关联的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 The property ‘MyProperty’ does not exist in XML namespace
‘07000’. Line 4 Position 7.
现在我知道为什么这是失败:元素是类型的页面,并且页面没有属性名为MyProperty。这只是在TestPage …中声明的,它是由x:Class属性指定的,而不是由元素本身指定的。据我所知,这种配置是XAML处理模型(即Visual Studio集成等)所必需的。
我怀疑我可以处理这个与依赖属性,但感觉有点像过度。我也可以使用现有的属性(例如DataContext),然后将该值复制到代码中的自定义属性中,但这将是非常丑陋。
上面是一个WPF示例,但我怀疑相同的答案将适用于Silverlight。我对这两个感兴趣 – 所以如果你发布一个答案,你知道将工作在一个,但不是其他,我将不胜感激,如果你在答案内指出:
解决方法
如果为您的页面创建了Base类,则可以使用normal属性而不使用Dependency属性。
public class BaseWindow : Window { public string MyProperty { get; set; } } <local:BaseWindow x:Class="BaseWindowSample.Window1" x:Name="winImp" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BaseWindowSample" MyProperty="myproperty value" Title="Window1" Height="300" Width="300"> </local:BaseWindow>
并且它工作,即使MyProperty不是依赖或附加。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。