WPF自定义窗口相关方法介绍

开发 开发工具
我们以一个代码范例来为大家介绍一下有关WPF自定义窗口的相关知识概念。希望通过这篇文章介绍的内容可以帮助大家提高对WPF的理解程度。

在这篇文章中我们将会为大家介绍一下有关WPF自定义窗口的继承方法。这一方面的知识点对于初学者来说是非常重要的。我们需要牢固掌握这一技巧。#t#

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

 

  1. public partial class 
    Window1 : Window 

修改成:

 

  1. public partial class 
    Window1 : BaseWindow 

 

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

这是因为在window1.xaml中

 

  1. < Window 
  2. xmlns="http://schemas.
    microsoft.com/winfx/2006
    /xaml/presentation"
     
  3. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml"
     
  4. x:Class="InheritWindow
    Demo.Window1"
     
  5. Width="300" Height="300"> 
  6. < Grid x:Name=
    "LayoutRoot"/> 
  7. < /Window> 

 

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

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

 

  1. < src:BaseWindow xmlns=
    "http://schemas.microsoft.
    com/winfx/2006/xaml/presentation"
     
  2. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml"
     
  3. x:Class="InheritWindowDemo.
    Window1"
     
  4. xmlns:src="clr-namespace:
    InheritWindowDemo"
     
  5. Height="300" 
  6. Width="300"> 
  7. < Grid> 
  8. < /Grid> 
  9. < /src:BaseWindow> 

 

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

OK,WPF自定义窗口编译顺利通过,继承成功。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-23 14:49:46

WPF面板

2010-03-18 16:19:02

Java自定义线程池

2010-01-15 15:26:46

VB.NET自定义类型

2009-12-24 14:38:52

WPF全屏幕窗口

2010-02-24 14:59:52

WCF自定义过滤器

2013-05-30 15:53:17

iOS开发iOS SDKPopver

2009-08-04 08:58:01

C#自定义特性

2012-07-24 15:03:19

OpenStack架构

2009-12-28 17:48:01

WPF界面布局

2009-12-28 13:47:35

WPF对话框

2009-08-28 17:45:19

C#自定义数据

2009-12-29 13:29:28

WPF Depende

2017-02-17 09:37:12

Android自定义控件方法总结

2009-07-28 10:21:05

自定义Command

2009-12-28 15:48:14

WPF窗口颜色

2009-08-04 12:56:51

C#自定义事件

2009-10-30 08:47:57

Windows 7窗口排列

2015-02-12 15:33:43

微信SDK

2009-12-25 14:35:34

WPF布局

2023-06-27 15:02:47

点赞
收藏

51CTO技术栈公众号