原創|其它|編輯:郝浩|2012-12-11 16:25:53.000|閱讀 1024 次
概述:在前面的文章中《WPF Elements構建超炫儀表盤(二)》中我們了解了要創建的儀表盤所包含的哪些模塊,在本文中就來看看具體的創建步驟。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在前面的文章中《構建超炫儀表盤(二) - Mindscape WPF Elements使用教程連載》中我們了解了要創建的儀表盤所包含的哪些模塊,在本文中就來看看具體的創建步驟。
運行VS2010,并且創建一個新的.NET 4.0 WPF應用程序。但是在開始之前,需要先添加一些組件,首先創建一個新的文件夾并命名為Lib,然后添加Caliburn.Micro.dll、System.Windows.Interactivity.dll 、the Microsoft.Windows.Shell.dll文件到這個文件夾下面;接下來,就是添加這些引用到你的項目中去,所以我們在這里將需要添加一個引用到System.ComponentModel.Composition ,這個會在稍后用到;當你在下載Caliburn.Micro.dll時就會有剛才在前文中提到的前面兩個dll文件,因為Caliburn.Micro.dll將為我們處理窗口創建,主要用于創建自定義窗口chrome,完成設置之后你可以刪除主要的窗口,想要刪除這個,還需要從xaml刪除StartupUri 。
就像在前面的文中提到的那樣,所有控件的主要數據來源來自一個訂單列表,所以需要創建一個名為“模型”的文件夾,然后添加一個類來表示一個訂單,同時這個訂單里存儲著客戶名稱、購買的產品類型、購買日期、采購的成本和部門、客戶來自哪個國家。當然如何存儲這些值是由你決定,產品類型例如可以是一個字符串或是其他,另一個模型對象將持有該產品的更多信息,Order類應該公開這些以綁定到視圖中的值與屬性。
現在我們添加此可視化模型的視圖,這個將是我們稱之為DashboardView的用戶控件,Caliburn Micro使用命名約定來找到一個可視化模型的視圖,這個模型名稱應以“ViewModel”結束。用戶控件的名稱以“View”結尾,他們都以一樣的名稱開始,在這個示例中是“Dashboard”。當遵循MVVM 模式時,為了不在后面的代碼中編寫任何的代碼,所以刪除了DashboardView.xaml.cs 文件。
為了將Caliburn Micro插入到應用程序中,需要引導程序,所以向項目中添加一個新的DashboardBootstrapper 類和擴展的Caliburn Micro引導程序。
public class DashboardBootstrapper : Bootstrapper<DashboardViewModel> { }
傳統的引導應用程序會告知Caliburn Micro哪個模型將會在應用程序啟動時使用,這就是我們現在所需要做的引導程序,我們很快就會回到這來集成一個自定義的窗口管理器。下面就是添加一個實例的啟動加載器到App.xaml:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:DashboardBootstrapper x:Key="bootstrapper" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
現在應用程序可以使用Caliburn Micro提供的所有東西,這時運行應用程序,將會顯示一個微小的空白窗口。
Caliburn Micro管理著窗口的創建以及關聯到合適的視圖模型,但是有的時候,你想控制一些窗口的屬性,窗口管理器就是用在這些地方,添加一個新類到DashboardWindowManager項目,延長Caliburn Micro indowManager類,在這里你可以覆蓋EnsureWindow方法,調用基本實現,然后在返回的窗口設置任何的屬性。我已經手動設置SizeToContent來實現WindowState來最大化,接下來,回到你的啟動加載器然后像這樣進行編輯:
public class DashboardBootstrapper : Bootstrapper<DashboardViewModel> { private CompositionContainer container; protected override void Configure() { container = new CompositionContainer(new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>())); CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new DashboardWindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(container); container.Compose(batch); } protected override object GetInstance(Type serviceType, string key) { string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key; var exports = container.GetExportedValues<object>(contract); if (exports.Count() > 0) { return exports.First(); } throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract)); } protected override IEnumerable<object> GetAllInstances(Type serviceType) { return container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType)); } protected override void BuildUp(object instance) { container.SatisfyImportsOnce(instance); } }
里面所看見的大部分是伴隨著Caliburn Micro一起帶過來的,在這里重要的是如何添加儀表的自定義模版的窗口管理器到配置方法中,在這個過程中不要忘記了引導程序的更改,的添加一個導出屬性到DashboardViewModel類,像下面這樣:
[Export(typeof(DashboardViewModel))]
回到儀表管理窗口管理器,我們可以做其他一些有用的東西比如設置應用程序圖標并應用自定義窗口chrome,這些可能是你要添加到一個應用程序中的一些,但是關于窗口管理區這個主題,現在是提到的好時機,可以向項目中添加一個圖標文件,然后再使用BitmapFrame。
創建窗口的圖標屬性進行設置,對于自定義窗口,可以使用Microsoft.Windows.Shell dll文件,在App.xaml中,我創建了窗口的風格,然后我發現在窗口管理器找到之后用到了應用窗口中,此外還需要附加一些事件處理程序,可以使用下面的代碼實現。下面就是窗口管理器的最終程序:
public class DashboardWindowManager : WindowManager { private Window _window; protected override Window EnsureWindow(object model, object view, bool isDialog) { _window = base.EnsureWindow(model, view, isDialog); _window.SizeToContent = SizeToContent.Manual; _window.WindowState = WindowState.Maximized; _window.Style = _window.FindResource("CustomWindowStyle") as Style; Uri icon = new Uri("../../WpfElements.ico", UriKind.Relative); _window.Icon = BitmapFrame.Create(icon); _window.CommandBindings.Add(new CommandBinding(SystemCommands.CloseWindowCommand, OnSystemCommandCloseWindow)); _window.CommandBindings.Add(new CommandBinding(SystemCommands.MinimizeWindowCommand, OnSystemCommandMinimizeWindow)); _window.CommandBindings.Add(new CommandBinding(SystemCommands.MaximizeWindowCommand, OnSystemCommandMaximizeWindow)); _window.CommandBindings.Add(new CommandBinding(SystemCommands.RestoreWindowCommand, OnSystemCommandRestoreWindow)); return _window; } private void OnSystemCommandCloseWindow(object sender, ExecutedRoutedEventArgs e) { SystemCommands.CloseWindow(_window); } private void OnSystemCommandMinimizeWindow(object sender, ExecutedRoutedEventArgs e) { SystemCommands.MinimizeWindow(_window); } private void OnSystemCommandMaximizeWindow(object sender, ExecutedRoutedEventArgs e) { SystemCommands.MaximizeWindow(_window); } private void OnSystemCommandRestoreWindow(object sender, ExecutedRoutedEventArgs e) { SystemCommands.RestoreWindow(_window); } }
最后在DashboardView.xaml中,可以得到粗略的儀表盤了,在下一課中,將會講到控件的布局來優化儀表效果。在本次的內容中,添加了應用程序的特定資源到App.xaml中。在大型的應用程序中,你可以添加類似這樣的資源到一個或值多個庫中。在這篇文章的最后,我將在每個控件后添加一個彩色的矩形,小效果如下:
在稍后的文章中,我將會演示添加屬性到可視化模型中去,然后將它們放到視圖中的控件中去,還將設置從視圖返回到視圖模型的設置,實現一個全功能的儀表應用程序。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件