WPF自定義窗口相關(guān)方法介紹
在這篇文章中我們將會(huì)為大家介紹一下有關(guān)WPF自定義窗口的繼承方法。這一方面的知識(shí)點(diǎn)對(duì)于初學(xué)者來(lái)說是非常重要的。我們需要牢固掌握這一技巧。#t#
假設(shè)我們寫好的父窗口類為BaseWindow,對(duì)應(yīng)BaseWindow.cs和BaseWindow.xaml, 要繼承它的窗口為Window1,對(duì)應(yīng)Window1.cs和Window1.xaml,我們常常進(jìn)行的動(dòng)作是將VS為我們自動(dòng)生成的代碼中的如下語(yǔ)句:
- public partial class
Window1 : Window
修改成:
- public partial class
Window1 : BaseWindow
但編譯后,你會(huì)得到一個(gè)錯(cuò)誤:Window1有著不同的基類。
這是因?yàn)樵趙indow1.xaml中
- < Window
- xmlns="http://schemas.
microsoft.com/winfx/2006
/xaml/presentation"- xmlns:x="http://schemas.
microsoft.com/winfx/2006/xaml"- x:Class="InheritWindow
Demo.Window1"- Width="300" Height="300">
- < Grid x:Name=
"LayoutRoot"/>- < /Window>
我們的WPF自定義窗口繼承了Window類,打開Window1.g.cs也可以看到這一點(diǎn)(這是VS自動(dòng)生成的一個(gè)中間文件,可以在Window1的InitializeComponent()方法上“轉(zhuǎn)到定義”來(lái)跳轉(zhuǎn)到該文件,也可以在Obj"Debug目錄下找到)。這就使得我們的Window1同時(shí)繼承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>
心想,這下可以編譯通過了吧,抱歉,不行,又得到另一個(gè)編譯錯(cuò)誤:src:BaseWindow不能是Xaml文件的根,因?yàn)樗怯蒟aml定義的,目前我避免這個(gè)問題的辦法是讓BaseWindow僅僅在C#中定義(即,沒有BaseWindow.xaml,只有BaseWindow.cs)。
OK,WPF自定義窗口編譯順利通過,繼承成功。