.png)
可以使用内置的 ComboBox 控件模板创建自定义的 ComboBox 模板。 Popup 控件包含使用户能够从列表中选择一项的 ListBox 控件。默认情况下, ComboBox 控件如下所示:
.png)
ComboBox 模板的部件
ComboBox 模板包含以下部件:
.png)
| 部件名称 | 对象类型 |
|---|---|
|
ContentPresenter |
|
FrameworkElement |
|
ToggleButton |
|
Popup |
提示: |
|---|
若要查看模板的部件,请在修改模板的同时打开“部件”面板。 |
ComboBox 提示
组合框由三部分组成:包含项列表的弹出窗口 (4)、显示当前选定项的区域 (1),以及用于打开和关闭弹出窗口的切换按钮 (3)。
ContentPresenter 部件
ContentPresenter 部件是必需的,用于显示当前项。如果在模板中的 ContentPresenter 部件内放入一些内容,则在未选定任何项时将显示这些内容。
ContentPresenterBorder 部件
如果 IsHitTestVisible 为 true,则可以单击 ContentPresenterBorder 部件以打开和关闭弹出窗口,而且弹出窗口将位于 ContentPresenterBorder 的左下角 (2)。版式面板对于 ContentPresenterBorder 部件是一个很好的选择。
DropDownToggle 部件
DropDownToggle 部件是可选的,但可以使用它作为打开和关闭弹出窗口的另一种方式。
Popup 部件
Popup 部件是必需的。这是在其中显示各项的部件。 ItemsPresenter 用于指示应在哪里显示各项。 ItemsPresenter 应放入 ScrollViewer 部件内。 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”。若要在两个独立状态处于活动状态时修改控件的外观,您可以固定一个状态组中状态的预览,同时修改另一个状态组中的状态。
模板绑定
可以对“Background”、“BorderBrush”、“Foreground”或“BorderThickness”属性进行模板绑定。有关详细信息,请参阅在模板中使用对象属性。
将对象转换为 ComboBox 控件
下图是组合框的一种设计综合 (comp)。
.jpg)
注意: |
|---|
请务必注意,前面的图形尚不是 ComboBox 控件,而是类似于 ComboBox 控件的作品。 |
本例在以下过程的步骤 2 中使用 XAML 代码。
打开新的 Microsoft Silverlight 项目。在“代码”视图中,找到以下代码,然后删除结尾斜线标记 (
/)。<Grid x:Name="LayoutRoot" Background="White"/>复制以下代码,然后将它们粘贴到您的新项目中(粘贴到您在步骤 1 中找到的代码之后)。
<Grid Height="70" Width="120"> <Rectangle x:Name="contentarea" Fill="#FF333333" RadiusX="5" RadiusY="5" Height="20" VerticalAlignment="Top" /> <Rectangle Fill="#FF666666" RadiusX="3" RadiusY="3" HorizontalAlignment="Right" Width="14" Height="18" Margin="0,1,1,0" VerticalAlignment="Top" /> <Path Fill="White" Stretch="Fill" Width="8" Height="5" Data="M6,12 L2,16 L-1,12 L-4,12 L1,17 L3,17 L9,12 z" Margin="0,8,4,0" HorizontalAlignment="Right" VerticalAlignment="Top" /> <Rectangle x:Name="popupbackground" Fill="#FF333333" Stroke="#FF4C4C4C" Margin="0,20,0,0" /> <TextBlock Margin="5,25,0,0" Foreground="White" Text="Lorem"/> <TextBlock Margin="5,46,0,0" Foreground="White" Text="Ipsum"/> </Grid>在您刚粘贴的代码之后添加一个 Grid 结束标记 (
</Grid>)。在“对象和时间线”面板中,右键单击“Grid”,然后单击“构成控件”。在“构成控件”对话框中,单击“ComboBox”,然后单击“确定”。
在“对象和时间线”面板中,按 Ctrl,然后单击两个 TextBlock 项。右键单击任一选定的项,然后单击“剪切”。单击“返回到范围”
,然后单击“粘贴”。在“属性”面板的“布局”类别中,在“Width”旁边单击“高级选项”,然后单击“重置”。对“Height”重复该步骤。在“对象和时间线”面板中,右键单击“ComboBox”,单击“编辑模板”,然后单击“编辑当前模板”。
在“对象和时间线”面板中,右键单击 contentarea ,单击“分组”,然后单击“Grid”。
右键单击“Grid”,单击“构成 ComboBox 的部件”,然后单击“ContentPresenterBorder”。
在“部件”面板中,双击“ContentPresenter”。在“属性”面板的“布局”类别下,将“Margin”设置为以下值:
Left 5
Right 5
Top 1
Bottom 0
在“对象和时间线”面板中,单击“Rectangle”,按 Ctrl,然后单击“路径”。右键单击所选内容,单击“分组”,然后单击“Grid”。
在“对象和时间线”面板中,右键单击“Grid”,单击“构成 ComboBox 的部件”,然后单击“DropDownToggle”。单击“确定”。
右键单击“路径”,然后单击“剪切”。单击“返回到范围”
,单击“DropDownToggle”,然后按 Ctrl+V 粘贴内容。在“对象和时间线”面板中,选择“Grid”。在“部件”面板中,双击“Popup”。
在“工具”面板中,双击“Grid”。在“属性”面板的“布局”类别中,在“Width”旁边单击“高级选项”,然后单击“重置”。对“Height”重复该步骤。
在“对象和时间线”面板中,单击“popupbackground”,然后将它拖到您刚创建的网格上。在“属性”面板的“布局”类别中,在“Width”旁边单击“高级选项”,然后单击“重置”。对“Height”、“HorizontalAlignment”、“VerticalAlignment”和“Margin”重复这样做。
在“对象和时间线”面板中,将“ScrollViewer”拖到新的网格上。在“属性”面板的“布局”类别中,在“Width”旁边单击“高级选项”,然后单击“重置”。对“Height”、“HorizontalAlignment”、“VerticalAlignment”和“Margin”重复这样做。
单击“返回到范围”
。在“属性”面板的“布局”类别中,将“Height”设置为 20。按 Ctrl+Shift+B 生成项目,然后按 F5 测试项目。
有关向其他 ComboBox 对象应用新的 ComboBox 模板的信息,请参阅应用或删除资源。
引用
您可以在 MSDN 上的 Silverlight Control Gallery
(Silverlight 控件库)中找到关于 Microsoft Silverlight ComboBox 控件的属性和事件的详细信息。
另请参阅
概念
常用 Silverlight 控件的样式提示
SimpleComboBox 和 SimpleComboBoxItem
设置支持模板的控件的样式
Microsoft Corporation 版权所有 ⓒ 2011。保留所有权利。
ContentPresenter
ContentPresenterBorder
DropDownToggle
Popup
提示:
注意: