2019 年 5 月
第 34 卷,第 5 期
[XAML]
自訂 XAML 控制項
身為企業開發人員,您必須知道 SQL Server 使用方法。您知道.NET Web 服務。並針對您,設計美觀的 XAML 介面 (可能使用 Windows Presentation Foundation [WPF]) 是輕而易舉的。數千個其他職涯開發人員,像是 Microsoft 技術填補已備妥履歷表和裁剪與下列類似的 MSDN Magazine 文章,並將其釘選至您的工作流程看板面板。取得您的分叉,這篇文章是資料表的賭注。
它就可以大幅提升您的專業知識與 XAML 控制項。XAML 架構提供的豐富程式庫控制項的 UI 開發,但若要完成您想要您需要更多。在本文中,我將示範如何取得您想要使用 XAML 的自訂控制項的結果。
自訂控制項
有兩種方法可以在 XAML 中建立自訂控制項: 使用者控制項和樣板化控制項。使用者控制項是簡單、 設計人員易記的方法,來建立可重複使用的版面配置。樣板化控制項為開發人員提供彈性的配置,提供可自訂的 api。在此情況下,以任何語言,複雜的配置可能會產生數千行程式可能很難瀏覽有效率的 XAML。自訂控制項是有效的策略,以減少版面配置程式碼。
選擇正確的方法,會影響如何成功,您便可以使用上,並在您的應用程式中重複使用的控制項。以下是要幫助您入門的一些考量。
為了簡單起見。很容易不一定簡單,但簡單一定很容易。使用者控制項是簡單且輕鬆。在任何層級上的開發人員可以提供這些小小的觸達文件。
設計經驗。許多開發人員喜歡在 XAML 設計工具。可以在設計師中,建立樣板化控制項的版面配置,但它是採用設計階段經驗的使用者控制項。
API 介面。建置具直覺性的 API 介面,可讓開發人員輕鬆地使用它。使用者控制項支援自訂屬性、 事件和方法,但樣板化控制項是最具彈性。
彈性的視覺效果。提供絕佳的預設體驗可讓開發人員輕鬆地使用控制項。但有彈性的控制項都支援重新範本化的視覺效果。只有樣板化控制項支援重新範本化。
要加總,使用者控制項是最適合簡單和設計經驗,樣板化控制項提供最佳的 API 介面和最具彈性的視覺效果。
如果您決定使用者控制項的開頭,並將移轉到樣板化控制項,您會有一些工作要做。但是,不是終端機。這篇文章的使用者控制項的開頭,並移至樣板化控制項。請務必辨識許多可重複使用的版面配置,只需要使用者控制項。它也是合理開啟一行 (b2b) 解決方案,並尋找 [使用者控制項和樣板化控制項。
新的使用者劇本
您需要取得同意使用者授權合約 (EULA) 在新的應用程式中的新使用者。您和我都知道,任何使用者不想要同意使用者授權合約。儘管如此,法律必須確定使用者核取 [我同意] 才能繼續。因此即使使用者授權合約是令人困惑,您要確定 XAML 介面是簡潔、 直覺式。開始建立原型;加入 TextBlock、 一個核取方塊、 按鈕,如中所示**[圖 1**,然後在您開始思考。
[圖 1 原型 UI
在 XAML 設計工具中的原型設計很快速。它很容易,因為您花費的時間,若要了解這項工具。但是您的應用程式中的其他表單呢?您可能需要這項功能在其他地方。封裝是用來隱藏複雜的邏輯,從取用者設計模式。不重複原則 (DRY) 是另一個,將焦點放在程式碼重複使用。 XAML 會提供透過使用者控制項和自訂控制項。身為 XAML 開發人員,您知道自訂控制項是使用者控制項,比功能更強大,但是它們並不簡單。您決定將使用者控制項的開頭。或許就能完成工作。擾流器警示:它不能。
使用者控制項
使用者控制項並不難。它們提供一致、 可重複使用的介面和自訂的封裝程式碼後置。若要建立使用者控制項,選取 [使用者控制項從 [加入新項目] 對話方塊中,如中所示**[圖 2**。
[圖 2 加入新項目] 對話方塊
使用者控制項通常是另一個控制項的子系。不過,其生命週期很類似 windows 和頁面,可以是使用者控制項的值設定為 Window.Current.Content 屬性。使用者控制項是完整功能,支援的視覺狀態管理、 內部資源,在 XAML 架構的裝訂位置。建置它們不會洩漏可用的功能。我的目標是要重複使用它們在頁面上,利用其對視覺狀態管理、 資源、 樣式和資料繫結支援。其 XAML 實作是簡單且設計人員易記:
<UserControl>
<StackPanel Padding="20">
<TextBlock>Lorem ipsum.</TextBlock>
<CheckBox>I agree!</CheckBox>
<Button>Submit</Button>
</StackPanel>
</UserControl>
此 XAML 呈現我先前的原型,並顯示可以是簡單使用者控制項。當然,沒有任何自訂的行為,我宣告控制項的內建行為。
快速檢索路徑Eula 長,因此讓我們來處理文字的效能。TextBlock (與僅在 TextBlock) 已經過最佳化快速路徑、 低記憶體和 CPU 轉譯用法。它建置,可快速,但我可以小孩子的:
<TextBlock Text="Optimized" />
<TextBlock>Not optimized</TextBlock>
使用 TextBlock 內嵌控制項,例如 < 執行 / > 和 < LineBreak / > 中斷最佳化。屬性,例如 CharacterSpacing、 LineStackingStrategy 和 TextTrimming 可以執行相同動作。搞混了嗎?沒有簡單的測試:
Application.Current.DebugSettings
.IsTextPerformanceVisualizationEnabled = true;
IsTextPerformanceVisualizationEnabled 是偵錯時,已最佳化可讓您查看哪些應用程式中的文字少為人知的偵錯設定。如果文字不是綠色的則調查的時間。
每個版本的 Windows 中,較少的屬性會影響快速路徑中;不過,仍有數個負面和非預期地影響效能。有點刻意偵錯,這不是問題。
不可變的規則有無數的意見,因為有商務邏輯應該位於其中的選項。一般而言會將較不變的規則更接近放入控制項。這通常是您更輕鬆且更快速,並最佳化可維護性。
順便一提,商務規則是不同的資料驗證。回應資料的項目,並檢查為文字的長度和數值範圍是直接驗證。規則可管理使用者行為的型的別。
例如,銀行有商務規則不提供給貸款信用分數低於特定值的客戶。幕後有的規則不到外部特定郵遞區號的客戶。規則是關於行為。在某些情況下,規則會變更每一天,例如哪些信用分數會影響新的貸款。在其他情況下,規則永遠不會變更,例如如何修理曾經上無法運作超過 2014年 Subaru。
現在,請考慮這個驗收準則:使用者不能按一下按鈕,直到已核取方塊。這是規則,而且很接近不可變了。我要實作接近我的控制項:
<StackPanel Padding="20">
<TextBlock>Lorem ipsum.</TextBlock>
<CheckBox x:Name="AgreeCheckBox">I agree!</CheckBox>
<Button IsEnabled="{Binding Path=IsChecked,
ElementName=AgreeCheckBox}">Submit1</Button>
<Button IsEnabled="{x:Bind Path=AgreeCheckBox.IsChecked.Value,
Mode=OneWay}">Submit2</Button>
</StackPanel>
在此程式碼中,資料繫結完全滿足我的需求。Submit1 按鈕會使用傳統的 WPF (及 UWP) 資料繫結。Submit2 按鈕會使用現代化 UWP 資料繫結。
請注意,在**[圖 3** Submit2 已啟用。這是正確嗎?嗯,Visual Studio 設計工具中,傳統的資料繫結的好處是在設計階段的轉譯。現在,編譯過的資料繫結 (x: Bind) 才會發生在執行階段。選擇傳統和編譯的資料繫結是您要進行最困難的簡單決策。一方面,編譯的繫結很快速。但是,其他的傳統繫結上很簡單。已編譯的繫結存在位址 XAML 困難的效能問題: 資料繫結。傳統的繫結需要執行階段反映,因為它是原本就較慢,難以調整。
[圖 3 實作資料繫結的商務規則
傳統的繫結,例如非同步繫結; 已新增許多新功能可協助開發人員問世以來數種模式。為 UWP postured 成功 WPF,但是仍有相同的拖曳問題。以下是要考慮的項目:從 WPF,能夠以非同步模式使用傳統的繫結不被移植到 UWP。讀入,想什麼方法,但它會鼓勵企業開發人員將心力投注在編譯的繫結。編譯的繫結會運用 XAML 程式碼產生器中,會自動建立程式碼後置和結合使用真實的屬性和資料型別必須在執行階段的繫結陳述式。
因為此結合,而不相符的型別可能會造成錯誤,可以嘗試繫結至匿名物件或動態的 JSON 物件。這些邊緣案例不錯過由許多開發人員,但在他們離開:
- 已編譯的繫結可以解決效能問題,同時還引入某些條件約束的資料繫結。
- 回溯相容性會維持傳統的繫結支援,同時讓 UWP 開發人員可以更好的選項。
- 創新和改善資料繫結會投注不少心力,編譯的繫結,不是傳統的繫結。
- 功能,例如函式繫結是只能在已編譯的繫結中使用 Microsoft 的繫結策略的清楚焦點。
尚未簡單性和設計階段支援的繫結會保留傳統保持運作,並按下 Microsoft 開發人員工具小組持續改善已編譯的繫結和其開發人員經驗的引數。請注意,在本文中,選擇其中一種將附近 immeasurable 的影響。有些範例將示範傳統的繫結,而其他項目會顯示編譯的繫結。它由您決定。決策,當然是最大型的應用程式中有意義。
自訂事件無法在 XAML 中,宣告自訂事件,讓您在您的程式碼後置處理。比方說,我可以在我的使用者控制項上轉送至自訂的 click 事件的 [提交] 按鈕的 click 事件:
public event RoutedEventHandler Click;
public MyUserControl1()
{
InitializeComponent();
SubmitButton.Click += (s, e)
=> Click?.Invoke(this, e);
}
在這裡,程式碼會引發自訂事件,從按鈕轉送 RoutedEventArgs。使用開發人員可以處理這些事件以宣告方式,像是在 XAML 中的每個其他事件:
<controls:MyUserControl1 Click="MyUserControl1_Click" />
這個值會取用的開發人員不需要了解的新典範;自訂控制項和外的第一方控制項的行為功能相同。
自訂屬性若要讓取用的開發人員提供他們自己的 Eula,我可以在 TextBlock 上設定 X:fieldmodifier 屬性。這樣會修改預設私用值的 XAML 編譯行為:
<TextBlock x:Name="EulaTextBlock" x:FieldModifier="public" />
但很容易並不表示良好。這個方法會提供一些抽象概念,並讓開發人員了解內部結構。它也需要程式碼後置。因此,我會避免在此情況下使用屬性的方法:
public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(nameof(Text), typeof(string),
typeof(MyUserControl1), new PropertyMetadata(string.Empty));
也一樣簡單,而必須留意的問題 — 是相依性屬性的資料繫結至 TextBlock 的 Text 屬性。這可讓取用的開發人員,讀取、 寫入或繫結至自訂的 Text 屬性:
<StackPanel Padding="20">
<TextBlock Text="{x:Bind Text, Mode=OneWay}" />
<CheckBox>I agree!</CheckBox>
<Button>Submit</Button>
</StackPanel>
相依性屬性是為了支援資料繫結。強固的控制項支援基本的使用案例,例如資料繫結。此外,相依性屬性將只有一行加入至我的程式碼基底:
<TextBox Text="{x:Bind Text, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />
INotifyPropertyChanged 不支援使用者控制項中的自訂屬性的雙向資料繫結。這是因為相依性屬性引發繫結架構監視的內部變更的事件。這是它自己種 INotifyPropertyChanged。
上述程式碼會提醒我們 UpdateSourceTrigger 決定當註冊變更。可能的值為 Explicit、 LostFocus 和 PropertyChanged。後者就會發生的變更。
障礙取用的開發人員可能想要將使用者控制項的內容屬性設定。這是直覺式的方式,但它不支援使用者控制項。屬性已設定為我宣告 XAML:
<Controls:MyUserControl>
Lorem Ipsum
</Controls:MyUserControl>
此語法會覆寫內容屬性: TextBlock、 核取方塊和按鈕。如果我認為重新範本化基本的 XAML 使用案例,我的使用者控制項,就無法提供完整的強大體驗。使用者控制項很簡單,但是提供一些控制項或擴充性。直覺式的語法和重新範本化的支援是一般體驗的一部分。就可以開始考慮樣板化控制項。
樣板化控制項
XAML 看過大量改進記憶體耗用量、 效能、 協助工具和視覺一致性。開發人員會喜歡 XAML,因為它是有彈性。樣板化控制項是一個例子。
樣板化控制項可以定義完全新功能,但是通常數個複合現有的控制項。此範例中的 TextBlock、 核取方塊和按鈕一起是傳統的案例。
順便一提,請勿混淆與自訂控制項的樣板化控制項。樣板化控制項是自訂的版面配置。自訂控制項是類別繼承現有的控制項,而不需要任何自訂的樣式。有時候,如果您只需要額外的方法或以現有控制項的屬性,自訂控制項是絕佳的選項;其視覺效果和邏輯便已存在,您只需延伸它們。
控制項範本ControlTemplate 定義控制項的版面配置。在執行階段,會套用這個特殊的資源。每個方塊和按鈕位於 ControlTemplate。由 Template 屬性,可以輕鬆存取控制項的範本。該範本的屬性不是唯讀狀態。開發人員可以將它設定為自訂的 ControlTemplate,轉換控制項的視覺效果和行為,以符合其特定需求。這就是重新範本化的威力:
<ControlTemplate>
<StackPanel Padding="20">
<ContentControl Content="{TemplateBinding Content}" />
<CheckBox>I agree!</CheckBox>
<Button>Submit1</Button>
</StackPanel>
</ControlTemplate>
ControlTemplate 的 XAML 看起來像任何其他的版面配置宣告。在上述程式碼,請注意特殊 TemplateBinding 標記延伸。這個特殊的繫結會針對單向範本作業進行調整。自 Windows 10 版本 1809年,x: 繫結語法支援 UWP ControlTemplate 定義中。這可讓高效能、 編譯、 雙向和範本中的函式繫結。TemplateBinding 在大部分情況下運作良好。
Generic.xaml若要建立樣板化控制項,請在 [加入新項目] 對話方塊中選取樣板化控制項。這帶來了三個檔案: XAML 檔案中;其程式碼後置;和 themes/generic.xaml,其中包含的 ControlTemplate。Themes/generic.xaml 檔案等同於 WPF。它是特殊的。此架構將其合併到您的應用程式的資源自動。此處定義的資源的應用程式層級範圍:
<Style TargetType="controls:MyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:MyControl" />
</Setter.Value>
</Setter>
</Style>
使用隱含樣式套用 ControlTemplates: 沒有索引鍵的樣式。明確樣式有索引鍵用來將它們套用至控制項,隱含樣式會套用根據 TargetType。因此,您必須設定 DefaultStyleKey:
public sealed class MyControl : Control
{
public MyControl() => DefaultStyleKey = typeof(MyControl);
}
此程式碼設定 DefaultStyleKey,判斷哪一個樣式會隱含地套用至您的控制項。我要將它設定為 [在 ControlTemplate 中 TargetType 的對應值:
<ControlTemplate TargetType="controls:MyControl">
<StackPanel Padding="20">
<TextBlock Text="{TemplateBinding Text}" />
<CheckBox Name="AgreeCheckbox">I agree!</CheckBox>
<Button IsEnabled="{Binding IsChecked,
ElementName=AgreeCheckbox}">Submit</Button>
</StackPanel>
</ControlTemplate>
TemplateBinding TextBlock 的 Text 屬性繫結至從使用者控制項複製到樣板化控制項的自訂相依性屬性。TemplateBinding 是一種方法,非常有效率,通常最好的選擇。
[圖 4顯示設計工具中的 [我的工作結果。在 ControlTemplate 中宣告自訂的版面配置會套用至我的自訂控制項,並繫結會執行,並在設計階段呈現:
<controls:MyControl Text="My outside value." />
[圖 4 預覽版,並以透明的方式使用的內部屬性
若要使用我的自訂控制項的語法很簡單。我會讓它更加完善允許開發人員使用內嵌文字。這是最直覺的語法,來設定項目的內容。XAML 提供來協助我這麼做,做為類別屬性**[圖 5**顯示。
[圖 5 使用類別屬性來設定內容屬性
[ContentProperty(Name = "Text")]
public sealed class MyControl : Control
{
public MyControl() => DefaultStyleKey = typeof(MyControl);
public string Text
{
get => (string)GetValue(TextProperty);
set => SetValue(TextProperty, value);
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(nameof(Text), typeof(string),
typeof(MyControl), new PropertyMetadata(default(string)));
}
請注意 ContentProperty 屬性,來自 Windows.UI.Xaml.Markup 命名空間。它會指出哪一個直接的屬性,在 XAML 中宣告的內嵌內容應該寫入。因此,現在,我可以宣告我的內容,就像這樣:
<controls:MyControl>
My inline value!
</controls:MyControl>
很美觀。樣板化控制項可讓您彈性地設計控制項互動和中的方式似乎最直覺的語法。[圖 6顯示 ContentProperty 引入至控制項的結果。
[圖 6 設計預覽
ContentControl XAML 我先前建立的自訂屬性,並將該屬性對應至控制項的內容,其中提供已針對該內建的控制項。因此也稱為 ContentControl,它的屬性稱為內容。ContentControl 也提供 ContentTemplate 和 ContentTransition 屬性來處理視覺效果和轉換。按鈕、 核取方塊、 框架和許多標準的 XAML 控制項繼承 contentcontrol 衍生。我可以擁有,太;我只會使用內容,而不是文字:
public sealed class MyControl2 : ContentControl
{
// Empty
}
在這段程式碼,請注意精鍊的語法,來建立自訂的控制項具有內容屬性。ContentControl 自動-轉譯成 ContentPresenter 時宣告。這是快速、 簡易的解決方案。不過,還有一點要注意:ContentControl,不支援 XAML 中的常值字串。因為它違反了我的目標,讓我支援常值字串的控制項,我將著重於控制項中,考慮 ContentControl 另一次。
存取內部控制項X:name 指示詞宣告中的程式碼後置自動產生的欄位名稱。MyCheckBox x: 名稱提供核取方塊,並產生器會建立稱為 MyCheckBox 類別中的欄位。
藉由比較 X:key (僅適用於資源) 並不會建立一個欄位。它會加入資源字典的無法解析的型別之前先使用它們。如需資源,X:key 會提供效能改進。
X:name 建立支援欄位,因為它不能在 ControlTemplate 中;範本會分離從任何支援的類別。相反地,您會使用 Name 屬性。
Frameworkelement,控制項的上階的相依性屬性名稱。您使用它時您不能使用 X:name。名稱和 X:name 互斥給定的範圍中因為 FindName。
FindName 是依名稱; 用來找出物件的 XAML 方法它適用於名稱或 x: 名稱。它是在程式碼後置,而不是位於樣板化控制項,您必須在此使用 GetTemplateChild 可靠:
protected override void OnApplyTemplate()
{
if (GetTemplateChild("AgreeCheckbox") is CheckBox c)
{
c.Content = "I really agree!";
}
}
GetTemplateChild 是用於 OnApplyTemplate 覆寫,以尋找 ControlTemplate 所建立的控制項的協助程式方法。您可以用它來尋找內部的控制項的參考。
變更範本Re 樣板化控制項很簡單,但我建置了預期具有特定名稱的控制項類別。我必須確定新的範本會維護此相依性。我們將建置新的 ControlTemplate:
<ControlTemplate
TargetType="controls:MyControl"
x:Key="MyNewStyle">
ControlTemplate 的小型變更都是正常的。您不需要從頭開始。在 Visual Studio 文件大綱] 窗格中,以滑鼠右鍵按一下任何控制項,並擷取其目前範本的副本 (請參閱**[圖 7**)。
[圖 7 擷取控制項範本
如果我維護其相依性,我新增的 ControlTemplate 完全可以變更視覺效果和控制項的行為。在控制項上宣告明確的樣式,告知架構應忽略的預設值的隱含樣式:
<controls:MyControl Style="{StaticResource MyControlNewStyle}">
但是,ControlTemplate 的重寫隨附警告。控制項設計工具和開發人員必須小心支援協助工具和當地語系化功能。它很容易不小心移除這些軟體。
TemplatePartAttribute很方便如果自訂控制項無法通訊,它會預期的具名項目。只有在邊緣案例期間可能需要一些已命名的項目。在 WPF 中,您會有 TemplatePartAttribute:
[TemplatePart (
Name = "EulaTextBlock",
Type = typeof(TextBlock))]
public sealed class MyControl : Control { }
此語法會顯示在控制項可以通訊外部開發人員的內部相依性的方式。在此情況下,我在我的 ControlTemplate 預期名稱 EulaTextBlock TextBlock。我也可以指定自訂控制項的預期的視覺狀態:
[TemplateVisualState(
GroupName = "Visual",
Name = "Mouseover")]
public sealed class MyControl : Control { }
TemplatePart 時會使用 blend TemplateVisualState 與指南針對預期的開發人員建立自訂範本。ControlTemplate 可針對這些屬性進行驗證。因為 10240,WinRT 包含這些屬性。UWP 可以使用它們,但是 Blend for Visual Studio 不會。這些保留的良好、 前瞻性的做法是,但文件仍是最好的方法。
協助工具第一方 XAML 控制項精心設計,而且美觀、 相容且可存取測試。協助工具需求現在是第一等公民,每個控制項的版本需求。
當您重新範本第一方的控制項,置於您的風險填寫完成加入開發團隊的協助工具功能。這些很難取得正確的且非常容易出錯。時重新範本中選擇的控制項,您應該很熟悉在 framework 協助工具功能和技術來實作它們。否則,您會遺失其值相當大的一部分。
不只限於永久的障礙,但也暫時無行為能力的人,新增為版本需求的協助工具可幫助。重新範本化第一方的控制項時,它也可降低風險。
大功告成 !
在升級之後從使用者控制項的樣板化控制項,我介紹了極少的新程式碼。但我已新增許多功能。我們來看一下什麼工作已經完成整體。
封裝。控制項是數個控制項,會搭配使用自訂視覺效果和取用的開發人員可以輕鬆地重複使用整個應用程式的行為集合。
商務邏輯。控制項結合,以滿足使用者劇本的接受準則的商務規則。我已放置控制項接近不可變的規則,並支援豐富的設計階段經驗,太。
自訂事件。控制項公開控制項專屬自訂事件,像是 「 按一下 」,與控制項,協助交互操作的開發人員,而不需要它們了解版面配置的內部結構。
自訂屬性。控制項會公開允許取用的開發人員,以影響版面配置的內容的屬性。已完成這個步驟,已完全支援 XAML 資料繫結的方法。
API 語法。此控制項支援直覺式方法可讓開發人員宣告常值字串與簡單的方式在其內容。我利用 ContentProperty 屬性,若要這樣做。
範本。控制項隨附的預設配置的直覺式介面的 ControlTemplate。不過,讓取用者開發人員可以視需要自訂視覺效果支援 XAML 重新範本化。
還有更多執行
我的控制項需要更多,但不是太多 — 只是有一點要注意版面配置 (例如需要捲動大型文字) 以及幾個屬性 (例如核取方塊的內容)。我非常關閉。
控制項可支援視覺狀態管理,允許變更屬性的 XAML 的原生功能會根據調整大小事件或架構 (例如 mouseover) 的事件。成熟的控制項有視覺狀態。
控制項可支援當地語系化;在 UWP 中的原生功能會使用 RESW 字串篩選的作用中的地區設定中的 X:uid 指示詞關聯的控制項。成熟的控制項支援當地語系化。
控制項可支援外部樣式定義,可協助更新其視覺效果,而不需要新的範本,這可以包含共用的視覺效果,並且利用佈景主題和 BasedOn 樣式。成熟的控制項共用及重複使用的樣式。
總結
原型中 XAML 的 UI 很快速。使用者控制項輕鬆地建立簡單、 可重複使用的版面配置。樣板化控制項需要更複雜的功能,以建立簡單、 可重複使用的版面配置更多的工作。正確的方法是經驗的由開發人員,一些知識和許多。實驗。更了解這項工具,您就能更具生產力。
Windows Form 成功 2002 年 Visual Basic 6,如同 WPF 成功 2006年中的 Windows Form。WPF 隨行 XAML: UI 的宣告式語言。Microsoft 開發人員從未像是 XAML 中的任何項目。現在,Xamarin 和 UWP 將 XAML 帶到 iOS、 Android、 HoloLens、 Surface Hub、 Xbox、 IoT 和最新的桌上型電腦。事實上,XAML 現在是建置 Windows 作業系統本身的技術。
在世界各地的開發人員會喜歡 XAML,因為它是因此具生產力且更具彈性。Microsoft 工程師感覺相同;我們正在建置自己的應用程式和甚至是與 XAML 的 Windows 10。未來永遠是光明,這項工具是功能強大的技術是比以往更容易存取。
Jerry Nixon是資深軟體工程師,& 會導致架構設計人員在商業軟體工程 microsoft。他開發和設計的兩個十年的軟體。說話者、 召集人、 教師和作者,Nixon 還有 DevRadio 的主機。他的天數的大部分花教他的三個女兒 」 Star Trek"backstories,以及一集繪製。
感謝下列 Microsoft 技術專家來檢閱這篇文章:Daniel Jacobson, Dmitry Lyalin, Daren May, Ricardo Minguez Pablos