WPF窗口的子类化

7

我创建了一个WPF窗口。

然后我修改了它的类定义为:

public partial class myWindow : mySubclassedWindow

编译器报错:

“‘myWindow’的部分声明不能指定不同的基类”

myWindow.Xaml:

x:Class="WpfGridtest.myWindow"

所以在某个地方,有另一个继承自"Window"的部分类,但我找不到它。如何覆盖我的情况以使用子类窗口?


谢谢Jon,那就是问题所在。 还发现了这篇有用的文章: http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx

1个回答

10
那将在myWindow本身的声明中 - 设计师将基于XAML和元素类型生成部分类型的另一半。
您可以使用一个<mySubclassedWindow>元素,只要您为其提供适当的命名空间和程序集引用。
编辑:好的,这里有一个简短的示例,在名为WpfApplication的项目中。我的Window子类:
using System.Windows;

namespace WpfApplication
{
    public class EnhancedWindow : Window
    {
    }
}

我的 XAML:

<y:EnhancedWindow x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:y="clr-namespace:WpfApplication"
        Title="MainWindow" Height="350" Width="525">
</y:EnhancedWindow>

我的部分类型:

namespace WpfApplication
{
    public partial class MainWindow : EnhancedWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

所有的构建都没有问题。我认为这就是你想要做的,对吗?


谢谢Jon,你是指文件开头的<Window部分吗?我该如何修改以使用子类化版本? - Sonic Soul
@Sonic:是的,那就是我的意思。你需要修改它,让它引用你的子类类型而不是“Window”。我只是想出一个简短的演示... - Jon Skeet
@JonSkeet 这个解决方案有一个非常有趣的行为,使用 XAML 中的 EnhancedWindow 不会给出智能感知,但如果从外部程序集中引用 EnhancedWindow,则会给出智能感知。 - Kylo Ren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接