2010-06-05 25 views
2

看來,XAML文件應該在C#項目中有相應的.cs文件。我知道Visual Studio爲我們做了所有的事情。我只是好奇他們是如何連接在一起的?我的意思是,它們是在項目文件中指定的,還是僅僅因爲它們具有相同的名稱?另外,App.xaml文件指定了啓動文件,但編譯器如何知道?是否可以指定App.xaml以外的其他文件來執行與App.xaml相同的操作?XAML文件如何與cs文件關聯?

+0

請不要在標題重複標記(C#WPF)。 – 2010-06-05 14:45:54

+1

請注意,使用相同的機制將WPF + VB項目中的VB代碼關聯起來,這裏沒有任何特定於C#的內容(只要將「.cs」替換爲「.vb」的示例文件名)。 – Richard 2010-06-05 15:37:14

回答

7

WPF中沒有什麼神奇的事情發生。所有發生的事情都寫在哪裏。它是生成一些代碼的VS。

xaml代碼與類關聯。

<Window x:Class="YourNameSpace.MainWindow" ... 

VS爲您生成其中有一個名爲WindowMainWindow類MainWindow.cs文件。這裏的類型很重要。如果使用其他類型,編譯器將不會將其鏈接到MainWindow.xaml,即使它是正確的類名稱。 最終,對於UserControl,您將使用xaml標記<UserControl而不是Window標記。

還有一件事,編譯器在編譯時還會在obj文件夾中生成一個名爲MainWindow.g.cs的文件,您還可以在其中找到編譯版本的xaml文件。 該文件將包含一個部分類MainWindow,並聲明您在XAML中使用的所有控件。這是編譯器所做的與XAML和相關類之間的關聯無關的場景作業的背後。

應用程序是相同的,只是類的類型發生了變化。這是將XAML與類連接起來。 對於啓動窗口,默認情況下,它在XAML文件中指定給一個類。但是,您可以自定義.cs文件並在ApplicationStartUp事件中執行您自己的邏輯。

與關機事件相同。默認情況下,當所有窗口關閉時,您可以將其更改爲MainWindow關閉或顯式關閉時。

csproj(在c#的情況下)告訴編譯器哪個類是應用程序。

<ApplicationDefinition Include="App.xaml"> 
    <Generator>MSBuild:Compile</Generator> 
    <SubType>Designer</SubType> 
</ApplicationDefinition> 

不僅像其他人的XAML標籤已經說過。該標籤只定義類的類型,不要讓你的程序從這個特定的類開始。

Application overview http://i.msdn.microsoft.com/dynimg/IC144461.png

你可以讀出更多的位置: MSDN - Building WPF application

MSDN - Code-Behind and XAML in WPF

MSDN - Application Management Overview

3

後面的代碼定義了派生自WindowUserControl,...的類,然後XAML的根元素引用與x:Class屬性一起鍵入。

App.xaml是啓動項,因爲它有一個<Application>根元素,它使用相同的機制來引用後面的代碼。