ComboBox 控件样式设置提示

Ee341409.0b2c798e-86c6-4ea2-a8a6-5cf1f12be1e2(ZH-CN,Expression.30).png

ComboBox 控件表示一个将不可编辑的文本框和 Popup 控件结合在一起的对象。Popup 控件包含使用户能够从列表中选择一项的 ListBox 控件。

与所有控件一样,您可以修改 ComboBox 控件(包括 Popup 控件、ListBox 控件以及 ComboBox 对象中包含的每个 ComboBoxItem 控件),使其外观与其默认外观截然不同。 默认情况下,ComboBox 控件如下所示:

Ee341409.f2dbcfc2-1ccd-49d5-9de9-6be35c73ad67(ZH-CN,Expression.30).png

重要的 ComboBox 控件属性

通过在“属性”面板的“公共属性”下设置“SelectedIndex”属性,您可以设置在 ComboBox 控件中处于选定状态的项。如果值为 -1,则显示未进行任何选择的 ComboBox 对象。如果值为 0,则显示选定了第一项的 ComboBox 对象。

若要向 ComboBox 控件中添加项,您可以手动添加 ComboBoxItem 对象,或者可以将数据集合绑定到 ComboBox 对象以使各项自动出现。

有关详细信息,请参阅将对象绑定到数据创建示例数据

ComboBox 模板的部件

ComboBox 控件只使用一个模板来定义下拉框、下拉箭头和弹出窗口的外观,即,“ComboBox 模板”。该模板的各个部件将对应用了该模板的 ComboBox 对象的外观和行为产生影响。

Ee341409.alert_tip(ZH-CN,Expression.30).gif提示:

若要设置 ComboBox 控件所包含的各项的样式,您必须修改其他模板。例如,如果 ComboBox 控件绑定了数据,则用于设置它所包含各项的样式的模板是生成的项模板(数据模板)。如果 ComboBox 控件未绑定数据,则没有应用于它所包含各项的模板。您要修改的是各项本身的模板,例如 ComboBoxItem 模板。

模板中可存在其他对象,以修饰 ComboBox 控件的外观,但下表中列出的部件与约定的部件行为相关。

若要查看模板的部件,请在修改模板的同时打开“部件”面板。在“对象和时间线”面板中,任何在“部件”面板中作为部件的对象旁边将出现一个 Ee341409.6cf58c39-edba-4a0e-acbc-1da272f9a387(ZH-CN,Expression.30).png 图标。

Ee341409.5fdb8c23-16c9-48df-a89b-12652543402e(ZH-CN,Expression.30).pngEe341409.69fada84-8d77-4b89-a14c-18fcbd2da5a9(ZH-CN,Expression.30).png

部件名称

对象类型

描述

Ee341409.25182a96-9a69-478a-9cfe-5b360e6a9bea(ZH-CN,Expression.30).png ContentPresenter

ContentPresenter

用于在 ComboBox 控件未展开时显示当前选定项的对象。

此部件是必需的。

Ee341409.05fe4b1d-f584-4bd2-99b6-8bc2d735a89d(ZH-CN,Expression.30).png ContentPresenterBorder

FrameworkElement

包含 ComboBox 控件的顶部部件的版式面板。

此部件是必需的。

Ee341409.f0c1ff71-7814-42ba-806b-7ea92d616e69(ZH-CN,Expression.30).png DropDownToggle

ToggleButton

用于在单击按钮时展开 ComboBox 控件的按钮。默认情况下,该按钮包含一个表示箭头的 Path 对象,但您要将该对象更改为图像。

Ee341409.eb6fad93-f17e-4f62-a926-8c8651862891(ZH-CN,Expression.30).png Popup

Popup

将用于显示 ComboBox 控件的内容的 Popup 对象。

此部件是必需的。

ComboBox 控件的状态

默认情况下,ComboBox 控件所处的状态可以为“CommonStates”状态组中的以下三种状态之一,在修改 ComboBox 模板时,您可以在“状态”面板中查看这些状态:

状态名称

描述

Normal

ComboBox 控件没有交互时的外观。

MouseOver

用户将指针移到 ComboBox 控件上时该控件的外观。

Disabled

当“IsEnabled”属性设置为“False”时 ComboBox 控件的外观。

ComboBox 控件所处的状态可以为“FocusStates”状态组中的以下三种状态之一:

状态名称

描述

Unfocused

ComboBox 控件没有键盘焦点时的外观。

Focused

控件上有键盘焦点并且 ComboBox 控件未展开时 ComboBox 控件的外观。例如,用户可能会按 Tab 键来循环选择应用程序中的各个对象,直至键盘焦点位于 ComboBox 控件上为止。

FocusedDropDown

控件上有键盘焦点并且 ComboBox 控件已展开时 ComboBox 控件的外观。

ComboBox 控件所处的状态可以为“ValidationStates”状态组中的以下三种状态之一:

状态名称

描述

Valid

控件有效时 ComboBox 控件的外观。

InvalidUnfocused

控件无效并且没有键盘焦点时 ComboBox 控件的外观。

InvalidFocused

控件无效但有键盘焦点时 ComboBox 控件的外观。

Ee341409.alert_tip(ZH-CN,Expression.30).gif提示:

状态组包含属于同一逻辑类别并且无法同时显示的可视状态。例如,“CommonStates”组包含的状态和用户与输入设备(例如鼠标)的交互相关。一次只能显示状态组中的一种状态,但一个组中的状态可与另一个状态组中的状态同时显示。

当您选择状态时,状态记录功能将启用,并且将为该状态记录您进行的任何更改。若要禁用状态记录功能,请在美工板上单击记录按钮 Ee341409.0dcc6415-6d4e-4fcf-a9a3-eb4664cb6cbc(ZH-CN,Expression.30).png,或者在“状态”面板中选择“Base”。若要在两个独立状态处于活动状态时修改控件的外观,您可以固定一个状态组中状态的预览,同时修改另一个状态组中的状态。

将对象转换为 ComboBox 控件

若要修改 ComboBox 控件的模板,请执行下列操作之一:

  • 在美工板上绘制“ComboBox”Ee341409.b174a511-dd12-4a45-a986-034de7693de9(ZH-CN,Expression.30).png,然后创建默认模板的副本。

    有关详细信息,请参阅创建或修改模板

  • 通过绘制对象或导入图片来设计 ComboBox 控件的外观,然后使用“构成控件”命令。

如果使用“构成控件”命令,请按以下步骤进行操作,以确保创建 ComboBox 模板需要的所有对象:

  1. 将希望用于定义 ComboBox 控件的外观的所有对象组合到一个 Grid 控件中。

  2. 选择新的 Grid 控件,然后在“工具”菜单上,单击“构成控件”。

  3. 在出现的对话框中,选择“ComboBox”,为模板命名,然后选择模板的存储位置。

    有关位置的信息,请参阅创建资源

  4. 单击“确定”之后,Microsoft Expression Blend 将进入模板编辑模式,并显示组成 ComboBox 控件的对象。可以在此模式下继续修改模板。例如,添加或修改对象,或者在“状态”面板中选择一种状态以修改该状态下模板的外观。

  5. 如果原始对象组中包括 TextBlock 对象 Ee341409.42165963-00f7-4a33-abcd-b0849edebada(ZH-CN,Expression.30).png,则该 TextBlock 对象在 ComboBox 控件模板中将转换为 ContentPresenter 对象 Ee341409.51a0c06c-d801-4133-8caf-cf1856a8dfc4(ZH-CN,Expression.30).png。这样,ComboBox 对象将能够显示文本。如果原始对象未包括 TextBlock 对象,则会向模板中自动添加一个 ContentPresenter 对象。

    如果还没有在模板中为 ContentPresenter 对象分配正确的部件,请右键单击 ContentPresenter 对象,指向“构成 ComboBox 的部件”,然后单击“ContentPresenter”。

    如果希望 ContentPresenter 对象内的其他对象即使在当前未选定任何项的情况下也显示在 ComboBox 控件中,您可以根据需要添加或移动这些对象。

  6. 如果有希望用作 ComboBox 控件的下拉箭头的对象或作品,请执行下列操作:

    1. 将这些对象或作品组合到版式面板中。

    2. 右键单击版式面板。

    3. 指向“构成 ComboBox 的部件”。

    4. 单击“DropDownToggle”。

      这样,即会将您的对象替换为 ToggleButton 对象,并使用您的对象来创建将应用于 ToggleButton 对象的样式和模板。

    5. 在“构成部件”对话框中,键入将创建的 ToggleButton 样式的名称。

    6. 选择将在其中存储样式的位置,然后单击“确定”。

      处于新 ToggleButton 对象的模板编辑模式中时,您可以继续进行修改,例如删除“ContentPresenter”对象(如果不希望在 ToggleButton 对象中显示文本),或在“状态”面板中选择状态以修改 ToggleButton 对象在这些状态下的外观。

    7. 若要返回到 ComboBox 的模板编辑模式,请在“对象和时间线”面板中单击“范围上移”Ee341409.55844eb3-ed98-4f20-aa66-a6f5b23eeb2b(ZH-CN,Expression.30).png,或者在美工板顶部的痕迹导航栏中单击“DropDownToggle”。

    Ee341409.alert_note(ZH-CN,Expression.30).gif说明:

    “DropDownToggle”部件是可选的,因为也可以单击“ContentPresenterBorder”来打开 ComboBox 控件项的列表,并且后者提供了更大的单击表面。

  7. “Popup”部件显示 ComboBox 控件的项。通常,会使用 ItemsPresenter 对象来显示项的列表,并且 ItemsPresenter 对象通常显示在 ScrollViewer 控件内以提供滚动功能。若要创建“Popup”部件,请执行下列操作:

    1. 在“对象和时间线”面板中,选择根版式面板。

    2. 在“部件”面板中,双击“Popup”部件,以便在模板的根位置创建 Popup 对象。

    3. 在新 Popup 对象的内部,绘制一个新的 ItemsPresenter 控件。

    4. 使用“选择”工具 Ee341409.2ff91340-477e-4efa-a0f7-af20851e4daa(ZH-CN,Expression.30).png 修改弹出项的大小和位置。

  8. 若要创建“ContentPresenterBorder”部件,请仅选择“ContentPresenter”和可选的“ToggleButton”,在“对象”菜单上指向“分组”,然后选择一个版式面板。右键单击新的版式面板对象,指向“构成 ComboBox 的部件”,然后单击“ContentPresenterBorder”。

  9. 考虑将模板中对象的某些画笔属性绑定到将最终使用模板的 ComboBox 对象的以下属性:

    • Background

    • BorderBrush

    • Foreground

    • BorderThickness

    有关详细信息,请参阅在模板中使用对象属性

  10. 若要退出模板编辑模式,请在美工板顶部的痕迹导航栏中单击“[ComboBox]”,或者在“对象和时间线”面板中单击“范围上移”Ee341409.55844eb3-ed98-4f20-aa66-a6f5b23eeb2b(ZH-CN,Expression.30).png

    有关将向其他 ComboBox 对象应用于新的 ComboBox 模板的信息,请参阅应用或删除资源

引用

您可以在 MSDN 上的 Silverlight Control Gallery(Silverlight 控件库)中找到有关 Microsoft Silverlight ComboBox 控件的属性和事件的详细信息。

另请参见

概念

常用 Silverlight 控件的样式提示

SimpleComboBox 和 SimpleComboBoxItem

设置支持模板的控件的样式