ComboBox 控件样式设置提示
ComboBox 控件表示一个将不可编辑的文本框和 Popup 控件结合在一起的对象。Popup 控件包含使用户能够从列表中选择一项的 ListBox 控件。
与所有控件一样,您可以修改 ComboBox 控件(包括 Popup 控件、ListBox 控件以及 ComboBox 对象中包含的每个 ComboBoxItem 控件),使其外观与其默认外观截然不同。 默认情况下,ComboBox 控件如下所示:
重要的 ComboBox 控件属性
通过在“属性”面板的“公共属性”下设置“SelectedIndex”属性,您可以设置在 ComboBox 控件中处于选定状态的项。如果值为 -1,则显示未进行任何选择的 ComboBox 对象。如果值为 0,则显示选定了第一项的 ComboBox 对象。
若要向 ComboBox 控件中添加项,您可以手动添加 ComboBoxItem 对象,或者可以将数据集合绑定到 ComboBox 对象以使各项自动出现。
ComboBox 模板的部件
ComboBox 控件只使用一个模板来定义下拉框、下拉箭头和弹出窗口的外观,即,“ComboBox 模板”。该模板的各个部件将对应用了该模板的 ComboBox 对象的外观和行为产生影响。
![]() |
---|
若要设置 ComboBox 控件所包含的各项的样式,您必须修改其他模板。例如,如果 ComboBox 控件绑定了数据,则用于设置它所包含各项的样式的模板是生成的项模板(数据模板)。如果 ComboBox 控件未绑定数据,则没有应用于它所包含各项的模板。您要修改的是各项本身的模板,例如 ComboBoxItem 模板。 |
模板中可存在其他对象,以修饰 ComboBox 控件的外观,但下表中列出的部件与约定的部件行为相关。
若要查看模板的部件,请在修改模板的同时打开“部件”面板。在“对象和时间线”面板中,任何在“部件”面板中作为部件的对象旁边将出现一个 图标。
部件名称 |
对象类型 |
描述 |
---|---|---|
|
ContentPresenter |
用于在 ComboBox 控件未展开时显示当前选定项的对象。 此部件是必需的。 |
|
FrameworkElement |
包含 ComboBox 控件的顶部部件的版式面板。 此部件是必需的。 |
|
ToggleButton |
用于在单击按钮时展开 ComboBox 控件的按钮。默认情况下,该按钮包含一个表示箭头的 Path 对象,但您要将该对象更改为图像。 |
|
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 控件的外观。 |
![]() |
---|
状态组包含属于同一逻辑类别并且无法同时显示的可视状态。例如,“CommonStates”组包含的状态和用户与输入设备(例如鼠标)的交互相关。一次只能显示状态组中的一种状态,但一个组中的状态可与另一个状态组中的状态同时显示。 |
当您选择状态时,状态记录功能将启用,并且将为该状态记录您进行的任何更改。若要禁用状态记录功能,请在美工板上单击记录按钮 ,或者在“状态”面板中选择“Base”。若要在两个独立状态处于活动状态时修改控件的外观,您可以固定一个状态组中状态的预览,同时修改另一个状态组中的状态。
将对象转换为 ComboBox 控件
若要修改 ComboBox 控件的模板,请执行下列操作之一:
在美工板上绘制“ComboBox”
,然后创建默认模板的副本。
有关详细信息,请参阅创建或修改模板。
通过绘制对象或导入图片来设计 ComboBox 控件的外观,然后使用“构成控件”命令。
如果使用“构成控件”命令,请按以下步骤进行操作,以确保创建 ComboBox 模板需要的所有对象:
将希望用于定义 ComboBox 控件的外观的所有对象组合到一个 Grid 控件中。
选择新的 Grid 控件,然后在“工具”菜单上,单击“构成控件”。
在出现的对话框中,选择“ComboBox”,为模板命名,然后选择模板的存储位置。
有关位置的信息,请参阅创建资源。
单击“确定”之后,Microsoft Expression Blend 将进入模板编辑模式,并显示组成 ComboBox 控件的对象。可以在此模式下继续修改模板。例如,添加或修改对象,或者在“状态”面板中选择一种状态以修改该状态下模板的外观。
如果原始对象组中包括 TextBlock 对象
,则该 TextBlock 对象在 ComboBox 控件模板中将转换为 ContentPresenter 对象
。这样,ComboBox 对象将能够显示文本。如果原始对象未包括 TextBlock 对象,则会向模板中自动添加一个 ContentPresenter 对象。
如果还没有在模板中为 ContentPresenter 对象分配正确的部件,请右键单击 ContentPresenter 对象,指向“构成 ComboBox 的部件”,然后单击“ContentPresenter”。
如果希望 ContentPresenter 对象内的其他对象即使在当前未选定任何项的情况下也显示在 ComboBox 控件中,您可以根据需要添加或移动这些对象。
如果有希望用作 ComboBox 控件的下拉箭头的对象或作品,请执行下列操作:
将这些对象或作品组合到版式面板中。
右键单击版式面板。
指向“构成 ComboBox 的部件”。
单击“DropDownToggle”。
这样,即会将您的对象替换为 ToggleButton 对象,并使用您的对象来创建将应用于 ToggleButton 对象的样式和模板。
在“构成部件”对话框中,键入将创建的 ToggleButton 样式的名称。
选择将在其中存储样式的位置,然后单击“确定”。
处于新 ToggleButton 对象的模板编辑模式中时,您可以继续进行修改,例如删除“ContentPresenter”对象(如果不希望在 ToggleButton 对象中显示文本),或在“状态”面板中选择状态以修改 ToggleButton 对象在这些状态下的外观。
若要返回到 ComboBox 的模板编辑模式,请在“对象和时间线”面板中单击“范围上移”
,或者在美工板顶部的痕迹导航栏中单击“DropDownToggle”。
说明:
“DropDownToggle”部件是可选的,因为也可以单击“ContentPresenterBorder”来打开 ComboBox 控件项的列表,并且后者提供了更大的单击表面。
“Popup”部件显示 ComboBox 控件的项。通常,会使用 ItemsPresenter 对象来显示项的列表,并且 ItemsPresenter 对象通常显示在 ScrollViewer 控件内以提供滚动功能。若要创建“Popup”部件,请执行下列操作:
在“对象和时间线”面板中,选择根版式面板。
在“部件”面板中,双击“Popup”部件,以便在模板的根位置创建 Popup 对象。
在新 Popup 对象的内部,绘制一个新的 ItemsPresenter 控件。
使用“选择”工具
修改弹出项的大小和位置。
若要创建“ContentPresenterBorder”部件,请仅选择“ContentPresenter”和可选的“ToggleButton”,在“对象”菜单上指向“分组”,然后选择一个版式面板。右键单击新的版式面板对象,指向“构成 ComboBox 的部件”,然后单击“ContentPresenterBorder”。
考虑将模板中对象的某些画笔属性绑定到将最终使用模板的 ComboBox 对象的以下属性:
Background
BorderBrush
Foreground
BorderThickness
有关详细信息,请参阅在模板中使用对象属性。
若要退出模板编辑模式,请在美工板顶部的痕迹导航栏中单击“[ComboBox]”,或者在“对象和时间线”面板中单击“范围上移”
。
有关将向其他 ComboBox 对象应用于新的 ComboBox 模板的信息,请参阅应用或删除资源。
引用
您可以在 MSDN 上的 Silverlight Control Gallery(Silverlight 控件库)中找到有关 Microsoft Silverlight ComboBox 控件的属性和事件的详细信息。