繁体   English   中英

在XAML中设置自定义窗口属性

[英]Set custom window property in xaml

我有以下代码:

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
    >

我可能只是误解了一些东西,但是我不确定是什么。

据我了解,找不到属性的原因是因为它是在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>

我赞赏这不一定是一个非常优雅的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM