逐步解說:在 Windows Form 中裝載 Windows Presentation Foundation 控制項
更新:2007 年 11 月
Windows Presentation Foundation (WPF) 提供用來建立應用程式的豐富環境。然而,長期開發 Windows Form 程式碼時,更有效的方式是使用 WPF 延伸現有 Windows Form 應用程式,而不是從頭重新撰寫程式碼。常見案例是想要在 Windows Form 應用程式內內嵌使用 WPF 實作的一個或多個頁面時。
這個逐步解說會引導您完成在 Windows Form 應用程式內裝載 WPF 頁面的應用程式。這個頁面是封裝 (Package) 於 DLL 中的簡單資料輸入應用程式。這個範例設計的外觀及功能與在 Windows Presentation Foundation 中裝載 Windows Form 複合控制項範例幾乎完全相同。主要差異是保留了裝載案例。
注意事項: |
---|
裝載的頁面嚴格來說並不是 WPF 控制項。而是封裝於 DLL 中的一般 WPF 頁面。然而,在表單上裝載 WPF 控制項的技術與用來裝載一般頁面的技術相同。如需 WPF 控制項的進一步討論,請參閱控制項自訂。 |
逐步解說分成兩個部分。第一個部分簡短說明 WPF 頁面的實作。第二個部分則詳細討論如何在 Windows Form 應用程式中裝載頁面、從頁面接收事件,以及存取部分頁面屬性。
逐步解說將說明的工作包括:
實作 Windows Presentation Foundation 頁面。
實作 Windows Forms 主應用程式 (Host Application)。
如需這個逐步解說中所說明之工作的完整程式碼清單,請參閱在 Windows Form 中裝載簡單的 Windows Presentation Foundation 控制項範例。
必要條件
您需要下列元件才能完成此逐步解說:
- Visual Studio 2008.
實作 Windows Presentation Foundation 頁面
這個範例中使用的 WPF 頁面就是取用使用者名稱和地址的簡單資料輸入表單。當使用者按一下兩個按鈕中的其中一個按鈕表示工作已完成時,頁面會引發自訂事件,將該資訊傳回給主應用程式。這個頁面的表單及函式,與逐步解說:在 Windows Presentation Foundation 中裝載 Windows Form 複合控制項中使用的 Windows Form 控制項實質上相同。並不需要特別自訂頁面,就可以將頁面裝載在 Windows Form 表單中。在大型 WPF 頁面上,也能輕鬆地將它載入至 Frame。下圖顯示呈現的頁面。
Windows Presentation Foundation 頁面
建立專案
若要啟動此專案:
啟動 Microsoft Visual Studio,並開啟 [新增專案] 對話方塊。
選取 [WPF 瀏覽器應用程式] 範本。
將新專案命名為 MyControls,並將它放在適當命名的最上層資料夾 (例如,WfHostingWpf) 中。稍後,您也會將主應用程式放在這個資料夾中。按一下 [確定],建立專案。預設專案包含一個名為 Page1 的單一頁面。
以滑鼠右鍵按一下 [方案總管] 中的專案名稱,然後選取 [屬性]。
將 [輸出類型] 設為 [類別庫],以將頁面編譯為 DLL。
從專案中刪除應用程式定義檔 MyApp.xaml 及 MyApp.xaml.cs。只有在將頁面實作為應用程式時才需要那些檔案。
注意事項: |
---|
將 WPF 應用程式編譯為類別庫 (Class Library) 時,不可以啟動程式庫來檢視呈現的頁面。因此,在完全實作應用程式之前,您會發現將輸出類型保留為 [Windows 應用程式] 是最方便的做法。這可讓您啟動應用程式,以檢查頁面外觀。滿意之後,請刪除應用程式定義檔案,並將輸出類型變更為 [類別庫],將它編譯為 DLL。 |
您的專案應該參考下列系統 DLL。如果預設未包含下列任一 DLL,請將它們加入至您的專案。
System
PresentationCore
PresentationFramework
WindowsBase
實作頁面的使用者介面
WPF 頁面的使用者介面 (UI) 是使用可延伸標記語言 (XAML) 進行實作。它設計的外觀和功能與逐步解說:在 Windows Presentation Foundation 中裝載 Windows Form 複合控制項中討論的 Windows Form 控制項類似。頁面的資料輸入 UI 是由五個 TextBox 項目組成:每個 TextBox 項目都會有當成標籤的相關 TextBlock 項目。頁面底端則有兩個 Button 項目:[確定] 和 [取消]。當使用者按一下任一個按鈕時,頁面會引發自訂事件,將資訊傳回給主應用程式。
基本配置
各種 UI 項目都是包含在 Grid 項目中。使用 Grid 排列頁面內容的方式,與在 HTML 中使用 Table 項目的方式相同。WPF 也具有 Table 項目,但是 Grid 比較輕量,也較適合簡單的配置工作。
下列範例顯示基本配置程式碼。這個程式碼會在 Grid 項目中指定資料行和資料列數目,藉以定義頁面的整體結構。請用它來取代 Page1.xaml 中的程式碼。
<Grid xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyControls.Page1"
Background="#DCDCDC"
Width="375"
Height="250"
Name="rootElement"
Loaded="Init">
...
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
將 TextBlock 和 TextBox 項目加入至格線
將項目的 RowProperty 和 ColumnProperty 屬性設為適當的資料列和資料行編號,就可以將 UI 項目放到格線中。請記住,資料列和資料行編號都是以零起始。而設定項目的 ColumnSpanProperty 屬性,則可以讓一個項目跨越多個資料行。如需 Grid 項目的詳細資訊,請參閱 HOW TO:建立 Grid 項目。
下列範例顯示頁面的 TextBox 和 TextBlock 項目與其 RowProperty 和 ColumnProperty 屬性,這些屬性是設為將項目正確地放在格線中。請將這個程式碼加入至 Page1.xaml,就放在 Grid 項目的下面。
<TextBlock Grid.Column="0"
Grid.Row="0"
Grid.ColumnSpan="4"
Margin="10,5,10,0"
HorizontalAlignment="Center"
Style="{StaticResource titleText}">Simple WPF Control</TextBlock>
<TextBlock Grid.Column="0"
Grid.Row="1"
Style="{StaticResource inlineText}"
Name="nameLabel">Name</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="1"
Grid.ColumnSpan="3"
Name="txtName"/>
<TextBlock Grid.Column="0"
Grid.Row="2"
Style="{StaticResource inlineText}"
Name="addressLabel">Street Address</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="2"
Grid.ColumnSpan="3"
Name="txtAddress"/>
<TextBlock Grid.Column="0"
Grid.Row="3"
Style="{StaticResource inlineText}"
Name="cityLabel">City</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="3"
Width="100"
Name="txtCity"/>
<TextBlock Grid.Column="2"
Grid.Row="3"
Style="{StaticResource inlineText}"
Name="stateLabel">State</TextBlock>
<TextBox Grid.Column="3"
Grid.Row="3"
Width="50"
Name="txtState"/>
<TextBlock Grid.Column="0"
Grid.Row="4"
Style="{StaticResource inlineText}"
Name="zipLabel">Zip</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="4"
Width="100"
Name="txtZip"/>
設定 UI 項目的樣式
資料輸入表單上許多項目的外觀都類似,這表示它們的一些屬性具有相同的設定。範例程式碼並未個別設定每個項目的屬性 (Attribute),而是使用 Style 項目來定義項目類別的標準屬性 (Property) 設定。這個方式可減少頁面的複雜性,而且可讓您透過單一樣式屬性變更多個項目的外觀。
Style 項目是包含在 Grid 項目的 Resources 屬性中,因此可以供頁面上的所有項目使用。如果樣式已命名,則加入設為這個樣式名稱的 Style 項目,就可以將樣式套用至項目。而未命名的樣式則會變成項目的預設樣式。如需 WPF 樣式的詳細資訊,請參閱設定樣式和範本。
下列範例顯示 WPF 頁面的 Style 項目。請將這個程式碼加入至 Page1.xaml,就放在 Grid 項目的下面。若要查看樣式套用至項目的方式,請參閱前一個程式碼範例。例如,最後一個 TextBlock 項目具有 inlineText 樣式,而最後一個 TextBox 項目則使用預設樣式。
<Grid.Resources>
<Style x:Key="inlineText" TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="10,5,10,0"/>
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style x:Key="titleText" TargetType="{x:Type TextBlock}">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Margin" Value="10,5,10,0"/>
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10,5,10,0"/>
<Setter Property="Width" Value="60"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="10,5,10,0"/>
</Style>
</Grid.Resources>
加入確定和取消按鈕
頁面上的最終項目是 [確定] 和 [取消] Button 項目,這兩個會佔用 Grid 最後一個資料列的前兩個資料行。這些項目會使用通用事件處理常式 ButtonClicked,以及前一個程式碼範例中定義的預設 Button 樣式。請將下列程式碼加入至 Page1.xaml,就放在最終 TextBox 項目的下面。頁面的 XAML 部分現在已完成。
<Button Grid.Row="5"
Grid.Column="0"
Name="btnOK"
Click="ButtonClicked">OK</Button>
<Button Grid.Row="5"
Grid.Column="1"
Name="btnCancel"
Click="ButtonClicked">Cancel</Button>
實作頁面的程式碼後置檔案
WPF 頁面的程式碼後置 (Code-Behind) 檔案 Page1.xaml.cs 會實作四個基本工作:
使用 Application 物件登錄頁面的 DLL 名稱,讓它知道要從何處載入頁面。
處理使用者按一下其中一個按鈕時進行的事件。
從 TextBox 項目中擷取資料,並將它封裝到自訂事件引數物件中。
引發自訂 OnButtonClick 事件,用以通知主應用程式使用者已完成,並將資料傳回給主應用程式。
頁面也會公開一些色彩和字型屬性,讓您可以控制頁面的外觀。與用來裝載 Windows Form 控制項的 WindowsFormsHost 類別不同的是,ElementHost 類別只會公開頁面的 Background 屬性。為了維護這個程式碼範例與逐步解說:在 Windows Presentation Foundation 中裝載 Windows Form 複合控制項中所討論範例的類似性,頁面會直接公開其餘屬性。
程式碼後置檔案的基本結構
程式碼後置檔案是由單一命名空間 MyControls 所組成,而這個命名空間包含 Page1 和 MyControlEventArgs 這兩個類別。請用下列程式碼取代 Page1.xaml.cs 中的程式碼。
using System;
using System.Windows;
using System.Windows.Navigation;
using System.Windows.Controls;
using System.Windows.Media;
namespace MyControls
{
public partial class Page1 : Grid
{
//...
}
public class MyControlEventArgs : EventArgs
{
//...
}
}
第一個類別 Page1 是部分類別,內含的程式碼可實作 Page1.xaml 中定義之 UI 的功能。剖析 Page1.xaml 時,會將 XAML 轉換為相同的部分類別,而且會合併這兩個部分類別以產生編譯的頁面。因此,程式碼後置檔案中的類別名稱必須符合指派給 Page1.xaml 的類別名稱,而且必須繼承自頁面的根項目。第二個類別 MyControlEventArgs 是事件引數類別,用來將資料傳回給主應用程式。
初始化 Page1 類別
下列程式碼範例會實作數個基本工作:
宣告私用 (Private) 事件 OnButtonClick 和其相關委派 MyControlEventHandler。
建立數個儲存使用者資料的私用全域變數。這個資料是透過對應的屬性所公開。
實作頁面之 Loaded 事件的 Init 處理常式。這個處理常式會將 Page1.xaml 中定義的值指派給全域變數,以初始化全域變數。而做法是使用指派給一般 TextBlock 項目 nameLabel 的 Name,來存取該項目的屬性設定。
將下列程式碼加入至 Page1 類別。
public partial class Page1 : Grid
{
public delegate void MyControlEventHandler(object sender, MyControlEventArgs args);
public event MyControlEventHandler OnButtonClick;
private FontWeight _fontWeight;
private double _fontSize;
private FontFamily _fontFamily;
private FontStyle _fontStyle;
private SolidColorBrush _foreground;
private SolidColorBrush _background;
private void Init(object sender, EventArgs e)
{
//They all have the same style, so use nameLabel to set initial values.
_fontWeight = nameLabel.FontWeight;
_fontSize = nameLabel.FontSize;
_fontFamily = nameLabel.FontFamily;
_fontStyle = nameLabel.FontStyle;
_foreground = (SolidColorBrush)nameLabel.Foreground;
_background = (SolidColorBrush)rootElement.Background;
}
處理按鈕的按一下事件
使用者按一下頁面底端的 [確定] 按鈕或 [取消] 按鈕,就表示完成了資料輸入工作。這兩個按鈕都使用相同的 Click 事件處理常式 ButtonClicked。而這兩個按鈕的名稱為 btnOK 或 btnFalse,讓處理常式只要檢查 sender 引數的值就可以判斷按的是哪一個按鈕。處理常式會執行下列動作:
建立 MyControlEventArgs 物件,內含頁面之 TextBox 項目的資料。
如果使用者按的是 [取消] 按鈕,則會將 MyControlEventArgs 物件的 IsOK 屬性設為 false。
引發 OnButtonClick 事件,告知主應用程式使用者已完成,並傳回收集的資料。
將下列程式碼加入至 Page1 類別,就放在 Init 方法的下面。
private void ButtonClicked(object sender, RoutedEventArgs e)
{
MyControlEventArgs retvals = new MyControlEventArgs(true,
txtName.Text,
txtAddress.Text,
txtCity.Text,
txtState.Text,
txtZip.Text);
if (sender == btnCancel)
{
retvals.IsOK = false;
}
if (OnButtonClick != null)
OnButtonClick(this, retvals);
}
建立屬性
類別的其餘部分只會公開與上面討論之全域變數對應的屬性。當屬性變更時,set 存取子會變更對應的項目屬性,並更新基礎全域變數,以修改頁面的外觀。
將下列程式碼加入至 Page1 類別。
public FontWeight MyControl_FontWeight
{
get { return _fontWeight; }
set
{
_fontWeight = value;
nameLabel.FontWeight = value;
addressLabel.FontWeight = value;
cityLabel.FontWeight = value;
stateLabel.FontWeight = value;
zipLabel.FontWeight = value;
}
}
public double MyControl_FontSize
{
get { return _fontSize; }
set
{
_fontSize = value;
nameLabel.FontSize = value;
addressLabel.FontSize = value;
cityLabel.FontSize = value;
stateLabel.FontSize = value;
zipLabel.FontSize = value;
}
}
public FontStyle MyControl_FontStyle
{
get { return _fontStyle; }
set
{
_fontStyle = value;
nameLabel.FontStyle = value;
addressLabel.FontStyle = value;
cityLabel.FontStyle = value;
stateLabel.FontStyle = value;
zipLabel.FontStyle = value;
}
}
public FontFamily MyControl_FontFamily
{
get { return _fontFamily; }
set
{
_fontFamily = value;
nameLabel.FontFamily = value;
addressLabel.FontFamily = value;
cityLabel.FontFamily = value;
stateLabel.FontFamily = value;
zipLabel.FontFamily = value;
}
}
public SolidColorBrush MyControl_Background
{
get { return _background; }
set
{
_background = value;
rootElement.Background = value;
}
}
public SolidColorBrush MyControl_Foreground
{
get { return _foreground; }
set
{
_foreground = value;
nameLabel.Foreground = value;
addressLabel.Foreground = value;
cityLabel.Foreground = value;
stateLabel.Foreground = value;
zipLabel.Foreground = value;
}
}
將資料傳回給主應用程式
檔案中的最終元件是 MyControlEventArgs 類別,這個類別是用來將收集的資料傳回給主應用程式。請將下列程式碼加入至 MyControls 命名空間。這項實作十分簡單,因此不再進一步討論。
public class MyControlEventArgs : EventArgs
{
private string _Name;
private string _StreetAddress;
private string _City;
private string _State;
private string _Zip;
private bool _IsOK;
public MyControlEventArgs(bool result,
string name,
string address,
string city,
string state,
string zip)
{
_IsOK = result;
_Name = name;
_StreetAddress = address;
_City = city;
_State = state;
_Zip = zip;
}
public string MyName
{
get { return _Name; }
set { _Name = value; }
}
public string MyStreetAddress
{
get { return _StreetAddress; }
set { _StreetAddress = value; }
}
public string MyCity
{
get { return _City; }
set { _City = value; }
}
public string MyState
{
get { return _State; }
set { _State = value; }
}
public string MyZip
{
get { return _Zip; }
set { _Zip = value; }
}
public bool IsOK
{
get { return _IsOK; }
set { _IsOK = value; }
}
}
實作 Windows Forms 主應用程式
Windows Form 主應用程式使用 ElementHost 物件來裝載表單上的 WPF 頁面。應用程式會處理頁面的 OnButtonClick 事件,以接收來自表單的資料。應用程式也會有一組可用來修改頁面外觀的選項按鈕。下列螢幕擷取畫面顯示所呈現的表單。
裝載在 Windows Forms 應用程式中的 Windows Presentation Foundation 頁面
建立專案
若要啟動此專案:
啟動 Visual Studio,並開啟 [新增專案] 對話方塊。
選取具有 [Windows Forms 應用程式] 範本的 [C# 專案]。
將新專案命名為 WFHost,並將它放在內含 MyControls 專案的相同最上層資料夾中。按一下 [確定],建立專案。
您也需要加入內含 WPF 頁面之 DLL 的參考:
按一下 [方案總管] 中的專案名稱,然後選取 [加入參考]。
按一下 [瀏覽] 索引標籤,然後巡覽至內含 MyControls.dll 的資料夾。
選取 MyControls.dll,然後按一下 [確定] 將 DLL 加入至參考清單。
在 [方案總管中],加入名為 WindowsFormsIntegration.dll 之 WindowsFormsIntegration 組件 (Assembly) 的參考。
實作表單的使用者介面設計
開啟 [Windows Form 設計工具],並將表單配置成如同實作 Windows Forms 主應用程式所顯示的示範:
展開預設表單,以放入控制項和 WPF 頁面。
將 System.Windows.Forms.Panel 控制項加入至表單的右上角,用以保留 WPF 頁面。
加入六組 System.Windows.Forms.RadioButton 控制項,如示範中所示。
將五個 System.Windows.Forms.Label 控制項加入至表單的右下角,如示範中所示。這些控制項是做為 WPF 控制項所傳回資料的標籤。
將 Label 控制項加入至上個步驟所加入之每個 Label 控制項的右邊。將每個控制項的 Text 屬性設為 ""。這些控制項會顯示 WPF 控制項傳回的資料。
加入另一個 Label 控制項,做為最後兩個步驟中控制項群組的標題。因為這個 Label 是要做為群組的標題,所以請將字型大小設成比群組中的控制項大兩點。
初始化表單
一般實作的是表單之 Load 事件處理常式中的裝載程式碼。請在 [Windows Forms 設計工具] 中按兩下表單,建立 Load 事件處理常式方法。下列程式碼範例包含範例的 Load 事件處理常式 (WPF 頁面之 Loaded 事件的處理常式),以及之後使用的數個全域變數的宣告。請用下列程式碼取代 Form1.cs 中的程式碼。
partial class Form1 : Form
{
private ElementHost ctrlHost;
private MyControls.Page1 wpfAddressCtrl;
System.Windows.FontWeight initFontWeight;
double initFontSize;
System.Windows.FontStyle initFontStyle;
System.Windows.Media.SolidColorBrush initBackBrush;
System.Windows.Media.SolidColorBrush initForeBrush;
FontFamily initFontFamily;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ctrlHost = new ElementHost();
ctrlHost.Dock = DockStyle.Fill;
panel1.Controls.Add(ctrlHost);
wpfAddressCtrl = new MyControls.Page1();
wpfAddressCtrl.InitializeComponent();
ctrlHost.Child = wpfAddressCtrl;
wpfAddressCtrl.OnButtonClick +=
new MyControls.Page1.MyControlEventHandler(
avAddressCtrl_OnButtonClick);
wpfAddressCtrl.Loaded += new RoutedEventHandler(
avAddressCtrl_Loaded);
}
void avAddressCtrl_Loaded(object sender, EventArgs e)
{
initBackBrush = (SolidColorBrush)wpfAddressCtrl.MyControl_Background;
initForeBrush = wpfAddressCtrl.MyControl_Foreground;
initFontFamily = wpfAddressCtrl.MyControl_FontFamily;
initFontSize = wpfAddressCtrl.MyControl_FontSize;
initFontWeight = wpfAddressCtrl.MyControl_FontWeight;
initFontStyle = wpfAddressCtrl.MyControl_FontStyle;
}
前一個程式碼範例中的 Form1_Load 方法顯示裝載 WPF 控制項的一般程序:
建立新的 ElementHost 物件。
將控制項的 Dock 屬性 (Property) 設為 DockStyle.Fill。
將 ElementHost 控制項加入至 Panel 控制項的 Controls 集合。
建立 WPF 頁面的執行個體 (Instance)。
將頁面指派給 ElementHost 控制項的 Child 屬性,以將頁面裝載在表單上。
Form1_Load 方法中的其餘兩行會將處理常式附加至兩個頁面事件:
OnButtonClick 是在使用者按一下 [確定] 或 [取消] 按鈕時,頁面所引發的自訂事件。處理這個事件可以取得使用者的回應,以及收集使用者填寫的任何資料。
Loaded 是 WPF 頁面在完全載入時所引發的標準事件。因為範例需要使用頁面的屬性來初始化數個全域變數,所以在這裡使用這個事件。發生表單的 Load 事件時,並未完全載入頁面,而且那些值仍然設為 null。您必須等到頁面的 Loaded 事件發生,才能存取那些屬性。
Loaded 事件處理常式已顯示在前一個程式碼範例中。OnButtonClick 處理常式則會在下一節中進行討論。
處理 OnButtonClick
當使用者按一下 [確定] 或 [取消] 按鈕時,就會發生 OnButtonClick 事件。
事件處理常式會檢查事件引數的 IsOK 欄位,判斷按下的是哪個按鈕。lbldata 變數對應於先前討論過的不可見的 Label 控制項。如果使用者按的是 [確定] 按鈕,則會將頁面之 TextBox 控制項的資料指派給對應的 Label 控制項。如果使用者按的是 [取消],則會將 Text 值設為 null。
請將下列程式碼加入至 Form1.cs。您現在可以編譯並執行應用程式了。
void avAddressCtrl_OnButtonClick(
object sender,
MyControls.MyControlEventArgs args)
{
if (args.IsOK)
{
lblAddress.Text = "Street Address: " + args.MyStreetAddress;
lblCity.Text = "City: " + args.MyCity;
lblName.Text = "Name: " + args.MyName;
lblState.Text = "State: " + args.MyState;
lblZip.Text = "Zip: " + args.MyZip;
}
else
{
lblAddress.Text = "Street Address: ";
lblCity.Text = "City: ";
lblName.Text = "Name: ";
lblState.Text = "State: ";
lblZip.Text = "Zip: ";
}
}
修改 Windows Presentation Foundation 頁面的外觀
表單左邊的 RadioButton 控制項可讓使用者變更 WPF 頁面的前景和背景色彩,以及數個字型屬性。背景色彩是透過 ElementHost 物件公開。其餘屬性則是公開為頁面的自訂屬性。
按兩下表單上的 RadioButton 控制項,建立對應 CheckedChanged 事件處理常式的範本。請從下列處理常式中擷取程式碼,然後將它加入至 Form1.cs 中對應的處理常式。
private void radioBackgroundOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Background = initBackBrush;
}
private void radioBackgroundLightGreen_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Background = new SolidColorBrush(Colors.LightGreen);
}
private void radioBackgroundLightSalmon_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Background = new SolidColorBrush(Colors.LightSalmon);
}
private void radioForegroundOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Foreground = initForeBrush;
}
private void radioForegroundRed_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Foreground = new System.Windows.Media.SolidColorBrush(Colors.Red);
}
private void radioForegroundYellow_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Foreground = new System.Windows.Media.SolidColorBrush(Colors.Yellow);
}
private void radioFamilyOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = initFontFamily;
}
private void radioFamilyTimes_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = new FontFamily("Times New Roman");
}
private void radioFamilyWingDings_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = new FontFamily("WingDings");
}
private void radioSizeOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontSize = initFontSize;
}
private void radioSizeTen_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontSize = 10;
}
private void radioSizeTwelve_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontSize = 12;
}
private void radioStyleOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontStyle = initFontStyle;
}
private void radioStyleItalic_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontStyle = System.Windows.FontStyles.Italic;
}
private void radioWeightOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontWeight = initFontWeight;
}
private void radioWeightBold_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontWeight = FontWeights.Bold;
}
請參閱
工作
逐步解說:在 Windows Form 中裝載 Windows Presentation Foundation 複合控制項
概念
逐步解說:在 Windows Presentation Foundation 中裝載 Windows Form 複合控制項