WPF继承自定义窗口

WPF继承自定义窗口不像winform和asp.net那么容易

假设我们写好的父窗口类为BaseWindow,对应BaseWindow.cs和BaseWindow.xaml, 要继承它的窗口为Window1,对应Window1.cs和Window1.xaml,我们常常进行的动作是将VS为我们自动生成的代码中的如下语句:

  public partial class Window1 : Window

  修改成:

  public partial class Window1 : BaseWindow

  但编译后,你会得到一个错误:Window1有着不同的基类。

  这是因为在window1.xaml中


<Window
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   x:Class="InheritWindowDemo.Window1"
   Width="300" Height="300">
   <Grid x:Name="LayoutRoot"/>
</Window>

 

  我们的Window继承了Window类,打开Window1.g.cs也可以看到这一点(这是VS自动生成的一个中间文件,可以在Window1的InitializeComponent()方法上“转到定义”来跳转到该文件,也可以在Obj"Debug目录下找到)。这就使得我们的Window1同时继承Window和BaseWindow类,多继承是不被允许的。

  那么自然地,需要修改Window1.xaml,将其中的根“Window”,修改成我们的BaseWindow:

  


<src:BaseWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                x:Class="InheritWindowDemo.Window1"
                xmlns:src="clr-namespace:InheritWindowDemo"
                Height="300"
                Width="300">
    <Grid>
    </Grid>
</src:BaseWindow>

 

  心想,这下可以编译通过了吧,抱歉,不行,又得到另一个编译错误:src:BaseWindow不能是Xaml文件的根,因为它是由Xaml定义的,目前我避免这个问题的办法是让BaseWindow仅仅在C#中定义(即,没有BaseWindow.xaml,只有BaseWindow.cs)。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值