內容控制項
內容控制項可讓您用來設計具有下列功能的文件和範本:
具有像表單一樣的受控制輸入的使用者介面 (UI)。
防止使用者編輯文件或範本之受保護區段的限制。 如需詳細資訊,請參閱使用內容控制項保護文件的部分區域。
資料繫結至資料來源。 如需詳細資訊,請參閱將資料繫結至內容控制項。
**適用於:**本主題中的資訊適用於 Word 2007 和 Word 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
如需觀看相關示範影片,請參閱使用 Visual Studio Tools for the Office System (3.0) 將資料繫結至 Word 2007 內容控制項 (英文)。
內容控制項概觀
內容控制項提供的 UI 已最佳化,適合進行使用者輸入和列印。 將內容控制項加入至文件時,控制項是透過框線、標題以及可以提供使用者指示的暫存文字來進行識別。 控制項的框線和標題不會出現在文件的列印版本中。
例如,如果想要使用者在文件的某個區段輸入日期,則可以在文件中加入日期選擇器內容控制項。 當使用者按一下該控制項時,就會出現標準日期選擇器 UI。 您也可以設定控制項屬性,以設定顯示的地區行事曆並指定日期格式。 在使用者選擇日期之後,就會隱藏控制項的 UI,而在使用者列印文件時只會出現日期。
內容控制項也可以協助您進行下列作業:
防止使用者編輯或刪除文件的某部分。 如果文件或範本具有使用者應該可以讀取但無法編輯的資訊,或想要使用者可以編輯但無法刪除內容控制項,則這十分有用。
將文件或範本部分繫結至資料。 您可以將內容控制項繫結至資料庫欄位、.NET Framework 中的 Managed 物件、儲存在文件中的 XML 項目,以及其他資料來源。
在文件層級專案中,您可以在設計階段或執行階段將內容控制項加入至文件。 在應用程式層級專案中,您可以在執行階段將內容控制項加入至任何開啟的文件。 如需詳細資訊,請參閱 HOW TO:將內容控制項加入至 Word 文件。
注意事項 |
---|
您只能在使用 Open XML 格式儲存的文件中使用內容控制項。 您無法在使用 Word 97-2003 文件 (.doc) 格式儲存的文件中使用內容控制項。 |
內容控制項型別
您可以將九種不同的內容控制項加入至文件。 在 Microsoft.Office.Tools.Word 命名空間中,大多數的內容控制項都會有對應的類型。 您也可以使用一般的 ContentControl,它可以代表任何可用的內容控制項。 如需示範如何使用每種可用內容控制項的逐步解說,請參閱逐步解說:使用內容控制項建立範本。
建置組塊陳列庫
建置組塊陳列庫可讓使用者從「文件建置組塊」(Document Building Block) 清單中選取要插入至文件的建置組塊。 文件建置組塊是已建立、可多次使用的內容片段,例如通用封面頁、格式化的資料表或標頭。 如需詳細資訊,請參閱 BuildingBlockGalleryContentControl 型別。 如需建置組塊的詳細資訊,請參閱開發人員可在 Word 2007 中使用的新功能。
核取方塊
核取方塊提供表示兩個狀態的 UI:選取或是清除。 這種內容控制項只在 Word 2010 中提供。
不像其他的內容控制項類型,Visual Studio Tools for Office Runtime 並不提供表示核取方塊內容控制項的特定類型。 換句話說,沒有 CheckBoxContentControl 類型。 不過您仍然可以用程式設計的方式,將一般的 ContentControl 加入到文件,建立核取方塊內容控制項。 如需詳細資訊,請參閱 Word 2010 專案中的核取方塊內容控制項。
下拉式方塊
下拉式方塊會顯示使用者可以選取的項目清單。 與下拉式清單不同的是,下拉式方塊可以讓使用者加入自己的項目。 如需詳細資訊,請參閱 ComboBoxContentControl 型別。
日期選擇器
日期選擇器會提供用來選取日期的行事曆 UI。 當使用者按一下控制項中的下拉箭號時,行事曆便會出現。 您可以使用地區行事曆和不同的日期格式。 如需詳細資訊,請參閱 DatePickerContentControl 型別。
下拉式清單
下拉式清單顯示使用者可以選取的項目清單。 與下拉式方塊不同的是,下拉式清單不可以讓使用者加入或編輯項目。 如需詳細資訊,請參閱 DropDownListContentControl 型別。
群組
群組控制項定義文件中使用者無法編輯或刪除的受保護區域。 群組控制項可以包含任何文件項目,例如文字、資料表、圖形及其他內容控制項。 如需詳細資訊,請參閱 GroupContentControl 型別。
圖片
圖片控制項會顯示影像。 您可以在設計階段或執行階段指定影像,或使用者可以按一下這個控制項,以選取要插入文件中的影像。 如需詳細資訊,請參閱 PictureContentControl 型別。
Rich Text 格式
Rich Text 格式控制項包含文字或其他項目,例如資料表、圖片或其他內容控制項。 如需詳細資訊,請參閱 RichTextContentControl 型別。
純文字
純文字控制項包含文字。 純文字控制項不可以包含其他項目,例如資料表、圖片或其他內容控制項。 此外,純文字控制項中所有文字的格式都相同。 例如,如果將純文字控制項之句子裡某個字設定為斜體,則該控制項內的所有文字都是斜體。 如需詳細資訊,請參閱 PlainTextContentControl 型別。
一般內容控制項
一般內容控制項是 ContentControl 物件,可以代表可用內容控制項的任何一種類型。 您可以使用 Type 屬性變更 ContentControl 物件,讓它具有不同型別之內容控制項的行為。 例如,如果建立代表純文字控制項的 ContentControl 物件,則可以在執行階段變更該物件,讓它具有下拉式方塊行為。
您只可以在執行階段建立 ContentControl 物件,而不是在設計階段。 如需詳細資訊,請參閱 HOW TO:將內容控制項加入至 Word 文件。
內容控制項的一般功能
大部分內容控制項都會共用一組可以用來執行一般工作的成員。 下表會描述一些您可以使用這些成員執行的工作。
這個工作: |
請執行: |
---|---|
取得或設定控制項中顯示的文字。 |
使用 Text 屬性。
注意事項
PictureContentControl 和 ContentControl 型別沒有這個屬性。
|
取得或設定在使用者編輯控制項之前顯示在控制項中的暫存文字,控制項會填入 (Populate) 資料來源中的資料,否則會刪除控制項的內容。 |
使用 PlaceholderText 屬性。
注意事項
PictureContentControl 型別沒有這個屬性。
|
取得或設定在使用者按一下內容控制項時,內容控制項框線中顯示的標題。 |
使用 Title 屬性。 |
在使用者編輯控制項之後,自動從文件中移除控制項 (控制項中的文字仍然會保留在文件中)。 |
使用 Temporary 屬性。 |
當使用者按一下內容控制項內部或以程式設計方式將游標移至內容控制項時,會執行程式碼。 |
處理控制項的 Entering 事件。 |
當使用者按一下內容控制項外部或以程式設計方式將游標移至內容控制項外部時,會執行程式碼。 |
處理控制項的 Exiting 事件。 |
在內容控制項因取消復原或復原作業而加入至文件之後執行程式碼。 |
處理控制項的 Added 事件。 |
只在從文件中刪除內容控制項之前執行程式碼。 |
處理控制項的 Deleting 事件。 |
使用內容控制項保護文件的部分區域
當您保護文件的某個部分時,使用者就無法變更或刪除文件中該部分的內容。 有多種方法可以使用內容控制項來保護文件的某個部分。
如果想要保護的區域是在內容控制項內部,則可以使用內容控制項屬性,讓使用者無法編輯或刪除控制項:
LockContents 屬性會讓使用者無法編輯內容。
LockContentControl 屬性會讓使用者無法刪除控制項。
如果想要保護的區域在內容控制項外部,或想要保護的區域包含內容控制項和其他類型的內容,則可以將整個區域放在 GroupContentControl 中。 與其他內容控制項不同的是,GroupContentControl 提供的是使用者看不到的 UI。 它的唯一用途是定義使用者無法編輯的區域。
注意事項 |
---|
如果建立的 GroupContentControl 包含內嵌內容控制項,則不會自動保護這些內嵌內容控制項。 您必須使用每個內嵌控制項的 LockContents 屬性,讓使用者無法編輯他們的內容。 |
如需如何使用內容控制項保護文件某部分的詳細資訊,請參閱 HOW TO:使用內容控制項保護文件的部分。
將資料繫結至內容控制項
您可以將內容控制項繫結至資料來源,在文件中顯示資料。 更新資料來源時,內容控制項會反映變更。 您也可以將變更儲存回資料來源。
內容控制項提供下列資料繫結 (Data Binding) 選項:
您可以使用與 Windows Form 相同的資料繫結模型,將內容控制項繫結至資料庫欄位或 Managed 物件。
您可以將內容控制項繫結至內嵌於文件之 XML 片段中的項目 (又稱為「自訂 XML 組件」(Custom XML Part))。
如需在 Office 方案中將主控制項繫結至資料的概觀,請參閱將資料繫結至 Office 方案中的控制項。
使用 Windows Form 資料繫結模型
大部分的內容控制項都支援 Windows Form 使用的簡單資料繫結模型。 簡單資料繫結表示控制項是繫結至單一資料項目,例如資料表的資料欄值。 如需詳細資訊,請參閱資料繫結和 Windows Form。
在文件層級專案中,您可以使用 Visual Studio 中的 [資料來源] 視窗,將資料繫結至內容控制項。 如需如何將資料繫結內容控制項加入至文件的詳細資訊,請參閱 HOW TO:將資料庫的資料填入文件和 HOW TO:將物件的資料填入文件。
下表列出的內容控制項可以繫結至 [資料來源] 視窗中的每種資料型別。
資料型別 |
預設內容控制項 |
其他可以繫結至這個資料型別的內容控制項 |
---|---|---|
Byte 陣列 |
無 |
在文件層級和應用程式層級專案中,您可以使用控制項之DataBindings 屬性的 Add() 方法,以程式設計方式將內容控制項繫結至資料來源。 如果這麼做,則會將字串 Text 傳給 Add() 方法的 propertyName 參數。 Text 屬性是內容控制項的預設資料繫結屬性。
內容控制項也支援雙向資料繫結,在這類繫結中,控制項的變更會更新至資料來源。 如需詳細資訊,請參閱 HOW TO:從主控制項中使用資料更新資料來源。
注意事項 |
---|
內容控制項不支援複雜資料繫結。 如果使用 Windows Form 資料模型將 DropDownListContentControl 或 ComboBoxContentControl 繫結至資料來源,則使用者在按一下控制項時只會看到單一值。 如果想要將這些控制項繫結至一組使用者可以選擇的資料值,則可以將這些控制項繫結至自訂 XML 組件中的項目。 |
將內容控制項繫結至自訂 XML 組件
您可以將一些內容控制項繫結至內嵌於文件之自訂 XML 組件中的項目。 如需自訂 XML 組件的詳細資訊,請參閱自訂 XML 組件概觀。
若要將內容控制項繫結至自訂 XML 組件中的項目,請使用控制項的 XMLMapping 屬性。 下列程式碼範例示範如何將 PlainTextContentControl 繫結至 Product 節點下的 Price 項目,而這個節點位在已加入至文件的自訂 XML 組件中。
plainTextContentControl1.XMLMapping.SetMapping("/Product/Price")
plainTextContentControl1.XMLMapping.SetMapping("/Product/Price", String.Empty, null);
如需示範如何將內容控制項繫結至自訂 XML 組件的詳細逐步解說,請參閱逐步解說:將內容控制項繫結至自訂 XML 組件。
將內容控制項繫結至自訂 XML 組件時,會自動啟用雙向資料繫結。 如果使用者編輯控制項中的文字,則會自動更新對應的 XML 項目。 同樣地,如果自訂 XML 組件中的項目值變更,則繫結至 XML 項目的內容控制項會顯示新的資料。
您可以將下列型別的內容控制項繫結至自訂 XML 組件:
內容控制項的資料繫結事件
所有內容控制項都會提供一組您可以處理以執行資料相關工作的事件,例如驗證在更新資料來源之前,控制項中的文字是否符合特定準則。 下表列出與資料繫結相關的內容控制項事件。
工作 |
事件 |
---|---|
只在 Word 自動更新已繫結至自訂 XML 組件之內容控制項的文字之前執行程式碼。 |
|
只在 Word 自動更新已繫結至內容控制項之自訂 XML 組件中的資料之前 (也就是,內容控制項中的文字變更之後) 執行程式碼。 |
|
執行專屬的程式碼,以依據自訂準則驗證控制項的內容。 |
|
在成功驗證控制項的內容之後執行程式碼。 |
內容控制項限制
在 Office 專案中使用內容控制項時,請注意下列限制。
設計階段與執行階段的行為差異
Microsoft Office Word 在執行階段對內容控制項規定的許多限制,在設計階段時不會強制執行。 在 Visual Studio 中設計文件層級方案的 UI 時,請務必只使用執行階段所支援的方式來修改內容控制項。
如果使用控制項在執行階段不支援的方式,在設計階段修改內容控制項,則 Visual Studio 設計工具不會警示您這項變更不受支援。 不過,如果偵錯或執行專案,或在儲存後重新開啟專案,則 Word 會顯示錯誤訊息,並要求修復文件的使用權限。 修復文件時,Word 會移除控制項的所有不支援內容和格式。
例如,Word 在設計階段並不會防止您將資料表加入至 PlainTextContentControl。 然而,因為 PlainTextContentControl 物件在執行階段不可以包含資料表,所以 Word 會在開啟文件時顯示錯誤訊息。
也請注意,許多定義內容控制項行為的屬性在設計階段都沒有作用。 例如,如果在設計階段將內容控制項的 LockContents 屬性設定為 True,則仍然可以在 Visual Studio 設計工具中編輯控制項中的文字。 這個屬性只會防止使用者在執行階段編輯控制項。
事件限制
內容控制項並未提供在使用者變更控制項中的文字或其他項目時引發的事件。 例如,使用者在 DropDownListContentControl 或 ComboBoxContentControl 中選取不同項目時不會引發事件。
若要判斷使用者何時編輯內容控制項的內容,則可以將控制項繫結至自訂 XML 組件,然後處理 StoreUpdating 事件。 在使用者變更已繫結至自訂 XML 組件的控制項內容時,會引發這個事件。 如需示範如何將內容控制項繫結至自訂 XML 組件的逐步解說,請參閱逐步解說:將內容控制項繫結至自訂 XML 組件。
Word 2010 專案中的核取方塊內容控制項
Word 2010 引進了代表核取方塊的新內容控制項類型。 不過,Visual Studio Tools for Office Runtime 並不提供對應的 CheckBoxContentControl 型別讓您用於 Office 專案中。 若要在 Word 2010 專案中建立核取方塊內容控制項,請使用 AddContentControl 方法來建立 Microsoft.Office.Tools.Word.ContentControl 物件,並將 wdContentControlCheckBox 值傳遞到方法,以指定核取方塊內容控制項。 下列程式碼範例示範如何執行這項操作。
Me.Paragraphs(1).Range.InsertParagraphBefore()
Me.Paragraphs(1).Range.Select()
Dim checkBoxControl1 As Microsoft.Office.Tools.Word.ContentControl =
Me.Controls.AddContentControl("checkBoxControl1", Word.WdContentControlType.wdContentControlCheckBox)
' The following line of code compiles in projects that target the .NET Framework 4, but it does not compile
' in projects that target the .NET Framework 3.5.
checkBoxControl1.Checked = True
' In projects that target the .NET Framework 3.5, use the following code.
checkBoxControl1.InnerObject.Checked = True
this.Paragraphs[1].Range.InsertParagraphBefore();
this.Paragraphs[1].Range.Select();
Microsoft.Office.Tools.Word.ContentControl checkBoxControl1 =
this.Controls.AddContentControl("checkBoxControl1", Word.WdContentControlType.wdContentControlCheckBox);
// The following line of code compiles in projects that target the .NET Framework 4, but it does not compile
// in projects that target the .NET Framework 3.5.
checkBoxControl1.Checked = true;
// In projects that target the .NET Framework 3.5, use the following code.
checkBoxControl1.InnerObject.Checked = true;
注意事項 |
---|
Microsoft.Office.Tools.Word.ContentControl 物件的 Checked 屬性只能直接用於目標為 .NET Framework 4 的專案。 在目標是 .NET Framework 3.5 的專案中,您必須使用 InnerObject 屬性,來存取基礎 Microsoft.Office.Interop.Word.ContentControl 物件的 Checked 屬性。 如需詳細資訊,請參閱 主項目和主控制項的程式設計限制。 |