介紹 Windows Presentation Foundation

來源:互聯網
上載者:User

標籤:style   tar   ext   color   width   get   

介紹 Windows Presentation Foundation

 

WPF 是一個庫,為開發使用者介面提供了全新的模型,用它建立案頭的應用程式比使用 Windows 表單更有優勢;WPF 還提供了新的基於 XML 的語言 XAML,用於處理大量的表單布局,而讓 F# 專註於開發應用程式的感興趣部分。

 

注意

現在有幾種 XAML 設計器,這些設計器使用圖形化的所見即所得 (WYSIWYG)(WYSWIG)工具設計介面,然後,用 F# 為其添加互動性。例如,Mobiform 提供的設計器 Aurora (http://www.mobiform.com/eng/aurora.html), Microsoft 提供的設計器Expression Blend (http://www.microsoft.com/products/expression/en/expression-blend/default.mspx)。

 

WPF 是 .NET 3.0 的一部分,如果使用Vista,預設情況下已經安裝;[ 對於 Windows 7 及以上版本,.NET 3.0 需要手動安裝;但是,提供了更高版本的 .NET 中同樣包含 WPF ];其他的 Windows 使用者需要安裝 .NET 3.0 才能訪問 WPF,最好的方法是下載 Windows SDK for Windows Server 2008 and .NET Framework 3.5 (http://is.gd/521hd) 。這一節中的樣本需要引用以下的 dll:PresentationCore.dll、PresentationFramework.dll 和 WindowsBase.dll。

我們看到的第一個例子示範了如何用 XAML 建立一個簡單表單,然後用 F# 顯示出來。樣本顯示了表單 XAML 定義有四個控制項:兩個標籤,一個文字框,一個按鈕。

 

清單 8-5 用 XAML 建立的簡單表單

<Window

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:sys="clr-namespace:System;assembly=mscorlib"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="64"/>

            <ColumnDefinition Width="128"/>

            <ColumnDefinition Width="128"/>

            <ColumnDefinition Width="128"/>

        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>

            <RowDefinition Height="24"/>

        </Grid.RowDefinitions>

        <Label Grid.Row="0" Grid.Column="0" >Input:</Label>

        <TextBox Name="input" Grid.Column="1" Text="hello"/>

        <Label Name="output" Grid.Row="0" Grid.Column="2"></Label>

        <Button Name="press" Grid.Column="3" >Press Me</Button>

    </Grid>

</Window>

 

使用表單的 XAML 定義,需要做兩件事情:第一,載入窗的定義並顯示。但是,如果僅做到這個,不能提供與使用者的互動,因此,需要做另一件事情才能使表單具有互動性;第二,用 F# 為控制項添加事件處理常式。在這裡,我們為按鈕添加事件處理常式,把文字框的內容顯示到第二個標籤中。函數 createWindow 是一個通用的函數,用於載入 XAML 表單。用這個函數建立值 window;然後,把這個值傳遞給表單的 FindName 方法,找出表單中的控制項,這樣,就可以和控制項進行互動了;最後,在主(main)函數中建立應用程式(Application)類的執行個體,並用它顯示表單(見清單 8-6)。

 

清單 8-6 顯示XAML 表單並為它添加事件處理常式

 

open System

openSystem.Collections.Generic

open System.Windows

openSystem.Windows.Controls

openSystem.Windows.Markup

open System.Xml

 

//creates the window and loads the given XAML file into it

let createWindow (file: string) =

  using (XmlReader.Create(file)) (fun stream->

    (XamlReader.Load(stream) :?>Window))

 

//create the window object and add event handler

//to the button control

let window =

  let temp = createWindow " ..\..\Window1.xaml"

  let press = temp.FindName("press") :?>Button

  let textbox = temp.FindName("input") :?>TextBox

  let label = temp.FindName("output") :?>Label

  press.Click.Add (fun _ -> label.Content <-textbox.Text )

  temp

 

//run the application

let main() =

  let app = new Application()

  app.Run(window) |> ignore

 

[<STAThread>]

do main()

 

[ 前面說過,]為了編譯這個程式,必須添加引用: PresentationCore.dll、PresentationFramework.dll 和 WindowsBase.dll,它們通常在C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 目錄。這一章的其他例子,都不需要添加引用,因為編譯器會自動引用庫。圖 8-7 是前面樣本建立的表單。

圖 8-7 用 XAML 和 F# 建立的表單

 

[

原文沒有敘述建立項目的過程。

第一步,建立一個 Fsharp 應用程式,把清單 8-6 的代碼複製過去;

第二步,在項目中添加新項,選擇文字檔,命名很重要,一定要是 Window1.xaml,把清單 8-5 的代碼複製過去;

第三步,添加引用 PresentationCore.dll、PresentationFramework.dll 和 WindowsBase.dll,還要加兩個System.Xml.dll、System.Xaml.dll;

第四步,如果現在運行,會出錯,提示找不到 Window1.xaml,改成" ..\..\Window1.xaml",具體原因未去深究。

 

現在再運行,應該沒有問題了。

]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.