由于个人需要,时不时得开发上位机程序,之前用过WIN API和C# WIN FORM,但都是开发一两个程序就不用了。这次又需要弄一个上位机,为了不花大量精力来弄界面,经过两天业余时间的搜索资料,决定选用WPF。
这个程序需要有类似VS2008和KEIL等软件的DOCKING PANEL功能,选用了开源的控件AVALONDOCK。
本人非专职上位机开发人员,只求用最快的速度达到需求,只把WPF的概念大约了解了一下,不打算单独研究XAML的语法。先建立一个DEMO感受一下,获得一些成就感是明智的。
新建一个空的工程,在references中添加avalondock的DLL,然后把XMAL文件按如下修改

<Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:avalonDock="clr-namespace:AvalonDock;assembly=AvalonDock" Title="MainWindow" Height="350" Width="525"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="24"/> <RowDefinition Height="*"/> <RowDefinition Height="24"/> </Grid.RowDefinitions> <Menu> <MenuItem Header="File"> <MenuItem Header="Exit"/> </MenuItem> </Menu> <avalonDock:DockingManager Grid.Row="1" x:Name="dockManager" > <StatusBar Grid.Row="2"> <StatusBarItem Content="AvalonDock 1.3 Sample Project"/> </StatusBar> </avalonDock:DockingManager> </Grid> </Window>
然后增加

<avalonDock:ResizingPanel Orientation="Horizontal"> <avalonDock:DockablePane> <avalonDock:DockableContent x:Name="classesContent" Title="Classes"/> </avalonDock:DockablePane> <avalonDock:DocumentPane> <avalonDock:DocumentContent Title="MyDocument!"/> </avalonDock:DocumentPane> </avalonDock:ResizingPanel>
也可以不要上面那部分代码,后台代码修改成如下,职业习惯,我更喜欢在后台生成窗口。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using AvalonDock; namespace WpfApplication4 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var resPanel = new ResizingPanel() { Orientation = Orientation.Horizontal }; var dockPane = new DockablePane() { }; var documentPane = new DocumentPane() { }; dockPane.Items.Add(new DockableContent() { Name = "classesContent", Title = "Classes" }); documentPane.Items.Add(new DocumentContent() { Title = "My Document!" }); resPanel.Children.Add(dockPane); resPanel.Children.Add(documentPane); dockManager.Content = resPanel; } } }
运行一下就会出来一个具有浮动和自动停靠等功能的DEMO程序。
以上程序来源:http://avalondock.codeplex.com/wikipage?title=GettingStarted&referringTitle=Documentation