1. 程式人生 > >WPF實現類似MDI子窗體的功能

WPF實現類似MDI子窗體的功能

在我的上一篇部落格中 http://blog.csdn.net/soft2buy/article/details/5479946,提到了用UserControl做為WPF的“MDI子窗體”。今天偶然發現XCeed 開發的Extended WPF Toolkit裡面有個ChildWindow窗體可以做為MainWindow的子窗體。ChildWindow也是從UserControl繼乘的。

先看看實現的效果圖:

WPF MDI 窗體

可以用滑鼠拖動窗體,也可以用鍵盤的上下左右箭頭移動窗體。效果還是不錯的!

實現步驟如下:

1.首先下載 Extended WPF Toolkit Community Edition 當前版本 2.0.0 (網址:

http://wpftoolkit.codeplex.com/)

   Community Edition是開源免費版本,可以看到裡面的很多控制元件功能都很強大,值得花點時間研究。所有控制元件的使用方法可以參考: 

2.新建一個WPF應用程式工程,新增對 Xceed.Wpf.Toolkit.dll 這個檔案的引用:

新增引用

3. 在MainWindow窗體新增對Xceed.Wpf.Toolkit的引用:

MainWindow引用

ToolKit裡面就有一個WindowContainer的控制元件,我們用他作為子窗體的容器,

<TookKit:WindowContainer/>

可以直接放一個子窗體在裡面,程式碼如下:

<!--子窗體要放在一個WindowContainer裡面-->
        <TookKit:WindowContainer x:Name="ChildContainer" Background="DarkGray" Width="550" Height="377" Canvas.Left="9" Canvas.Top="44">
            <!--子窗體-->
            <TookKit:ChildWindow x:Name="chWin" Caption="子窗體" Width="200" Height="200" WindowBackground="LightGreen" IsModal="False" WindowState="Open"/>
        </TookKit:WindowContainer>

也可以新建一個窗體(如:ChildWin.xaml)

修改窗體的XAML程式碼:

<ToolKit:ChildWindow       
        x:Class="WPFChildWin.ChildWin"
        xmlns:ToolKit="http://schemas.xceed.com/wpf/xaml/toolkit"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       
        Height="300" Width="300" WindowBackground="LightBlue" Caption="子窗體" IsModal="False" WindowState="Closed">
    
    <Canvas x:Name="myCanvas">
        <TextBlock Text="這是一個字窗體" Canvas.Left="89" Canvas.Top="109"/>      
        <Button x:Name="btClose" Width="70" Height="30" Content="關閉" Canvas.Left="200" Canvas.Top="218" Click="btClose_Click"/>
    </Canvas>
</ToolKit:ChildWindow>

由於是從UserControl繼承的,所以窗體的C#程式碼要刪除 ":Window"

主窗體MainWindow就可以通過一下方式載入:

 ChildWin cw = new ChildWin();           
     cw.WindowState = Xceed.Wpf.Toolkit.WindowState.Open;
 ChildContainer.Children.Add(cw);

本文原始碼下載: