现在的位置: 首页 > 综合 > 正文

WPF继承自定义窗口

2013年09月12日 ⁄ 综合 ⁄ 共 1258字 ⁄ 字号 评论关闭

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)。

 

 

抱歉!评论已关闭.