我有以下代码:
public partial class NewWindow: Window
{
public static readonly DependencyProperty PropNameProperty =
DependencyProperty.Register(
"PropName",
typeof(int),
typeof(NewWindow),
null);
public int PropName
{
get
{
return (int)GetValue(PropNameDependencyProperty);
}
set
{
SetValue(PropNameDependencyProperty, value);
}
}
现在,当我尝试使用我的新属性时,我无法编译:
<Window x:Class="AppName.NewWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:my="clr-namespace:AppName"
Title="NewWindow" Height="300" Width="300"
PropName="5" <-"property does not exist" error here
>
我可能只是误解了一些东西,但我不确定是什么。
答案 0 :(得分:4)
据我了解,它无法找到属性的原因是因为它在Window类中查找它,而不是在NewWindow类中查找它。为什么?因为XAML标记名称是Window,而不是NewWindow。
我尝试将标记更改为NewWindow,但实际上并不能这样做,因为您的XAML和后面的代码正在合作定义NewWindow类,而您无法根据自身定义类。这就是为什么顶级XAML元素总是父类,这就提出了一个解决方案:在一个继承自Window的新类中定义属性(为了参数调用它,ParentWindow),然后从中派生NewWindow,所以你得到像
这样的东西<local:ParentWindow x:Class="TestApp.NewWindow"
PropName="5"
xmlns:local="clr-namespace:TestApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
...
</local:ParentWindow>
我很欣赏这不一定是一个非常优雅的解决方案。