赞
踩
Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->ItemsControl->Selector->ComboBox
表示允许用户从其子元素中选择项的控件。
Selector 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。
名称 | 备注 | 权限 |
---|---|---|
IsSelectedProperty | 标识 IsSelected 附加属性。 | public static readonly |
IsSelectionActiveProperty | 标识 IsSelectionActive 附加属性。 | public static readonly |
IsSynchronizedWithCurrentItemProperty | 标识 IsSynchronizedWithCurrentItem 依赖项属性。 | public static readonly |
SelectedEvent | 标识 Selected 路由事件。 | public static readonly |
SelectedIndexProperty | 标识 SelectedIndex 依赖项属性。 | public static readonly |
SelectedItemProperty | 标识 SelectedItem 依赖项属性。 | public static readonly |
SelectedValuePathProperty | 标识 SelectedValuePath 依赖项属性。 | public static readonly |
SelectedValueProperty | 标识 SelectedValue 依赖项属性。 | public static readonly |
SelectionChangedEvent | 标识 SelectionChanged 路由事件。 | public static readonly |
UnselectedEvent | 标识 Unselected 路由事件。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
IsSynchronizedWithCurrentItem | 获取或设置指示 Selector 是否应当使 SelectedItem 与 Items 属性中的当前项保持同步的值。 | get; set; |
SelectedIndex | 获取或设置当前选择中第一项的索引,如果选择为空,则返回负一(-1)。 | get; set; |
SelectedItem | 获取或设置当前选择中的第一项,或者,如果选择为空,则返回 null。 | get; set; |
SelectedValue | 获取或设置通过使用 SelectedItem 而获取的 SelectedValuePath 的值。 | get; set; |
SelectedValuePath | 获取或设置用于从 SelectedValue 获取 SelectedItem 的路径。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
AddSelectedHandler | 为 Selected 附加事件添加处理程序。 | public |
AddUnselectedHandler | 为 Unselected 附加事件添加处理程序。 | public |
ClearContainerForItemOverride | 将项容器返回到其在 PrepareContainerForItemOverride(DependencyObject, Object) 之前所处的状态。 | protected |
GetIsSelected | 获取附加属性 IsSelected 的值,该值表示是否选择了某个项。 | public |
GetIsSelectionActive | 获取一个值,该值指示键盘焦点是否位于 Selector 中。 | public |
OnInitialized | 引发 Initialized 事件。 每当在内部将 IsInitialized 设置为 true 时调用此方法。 | protected |
OnIsKeyboardFocusWithinChanged | 当 IsKeyboardFocusWithin 属性更改时调用。 | protected |
OnItemsChanged | 当 Selector 中的项更改时更新当前选择。 | protected |
OnItemsSourceChanged | 当选择器中的项来源更改时调用。 | protected |
OnSelectionChanged | 当选择更改时调用。 | protected |
PrepareContainerForItemOverride | 准备好指定的元素以显示指定的项。 | protected |
RemoveSelectedHandler | 移除 Selected 附加事件的处理程序。 | public |
RemoveUnselectedHandler | 移除 Unselected 附加事件的处理程序。 | public |
SetIsSelected | 设置指示是否选择 Selector 中的项的属性值。 | public |
名称 | 备注 |
---|---|
当 Selector 的选择更改时发生。 |
名称 | 备注 | 对应方法 |
---|---|---|
获取或设置一个值,该值指示是否选择了某个项。 | GetIsSelected,SetIsSelected | |
获取一个值,该值指示键盘焦点是否处于 Selector 返回的值中。 | GetIsSelectionActive |
名称 | 备注 | 对应事件 |
---|---|---|
当选择项时发生。 | AddSelectedHandler,RemoveSelectedHandler | |
当取消选择项时发生。 | AddUnselectedHandler,RemoveUnselectedHandler |
表示带有下拉列表的选择控件,通过单击控件上的箭头可显示或隐藏下拉列表。
ComboBox允许用户从下拉列表中选择项,或根据需要在控件的文本框中输入新文本。
ComboBox 是 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。
IsEditable和 IsReadOnly 属性指定 ComboBox 用户执行以下操作之一时的行为方式:
下表描述了用户可以和不可以执行的操作,具体取决于IsEditable 和 IsReadOnly的值 。
IsReadOnly 为 true | IsReadOnly 为 false | |
---|---|---|
IsEditable 为 true | -无法通过输入字符串选择中的项 ComboBox 。 -无法输入与中的项不对应的字符串 ComboBox 。 -可以在文本框中选择字符串的一部分 ComboBox 。 -可以复制文本框中的字符串 ComboBox ,但不能将字符串粘贴到文本框中 ComboBox 。 | -可通过输入字符串在中选择一个项 ComboBox 。 -可以输入与中的项不对应的字符串 ComboBox 。 -可以在文本框中选择字符串的一部分 ComboBox 。 -可以复制或粘贴文本框中的字符串 ComboBox 。 |
IsEditable 为 false | -可通过输入字符串在中选择一个项 ComboBox 。 -无法输入与中的项不对应的字符串 ComboBox 。 -无法选择中的部分字符串 ComboBox 。 -无法复制或粘贴中的字符串 ComboBox 。 | -可通过输入字符串在中选择一个项 ComboBox 。 -无法输入与中的项不对应的字符串 ComboBox 。 -无法选择中的部分字符串 ComboBox 。 -无法复制或粘贴中的字符串 ComboBox 。 |
IsReadOnly仅当为时,IsEditable 属性才有效果 true
。
ComboBox是 ItemsControl ,因此它可以显示简单字符串以外的内容。 例如,你可以创建一个 ComboBox 包含映像列表的。 如果ComboBox 中的内容不是字符串,则在ComboBox 隐藏下拉列表时,过程字符串可能出现在中。 若要在 ComboBox 包含非字符串项时显示中的字符串,请使用 TextSearch.Text 或 TextSearch.TextPath 附加属性。
名称 | 备注 | 权限 |
---|---|---|
IsDropDownOpenProperty | 标识 IsDropDownOpen 依赖项属性。 | public static readonly |
IsEditableProperty | 标识 IsEditable 依赖项属性。 | public static readonly |
IsReadOnlyProperty | 标识 IsReadOnly 依赖项属性。 | public static readonly |
MaxDropDownHeightProperty | 标识 MaxDropDownHeight 依赖项属性。 | public static readonly |
SelectionBoxItemProperty | 标识 SelectionBoxItem 依赖项属性。 | public static readonly |
SelectionBoxItemStringFormatProperty | 标识 SelectionBoxItemStringFormat 依赖项属性。 | public static readonly |
SelectionBoxItemTemplateProperty | 标识 SelectionBoxItemTemplate 依赖项属性。 | public static readonly |
ShouldPreserveUserEnteredPrefixProperty | 标识 ShouldPreserveUserEnteredPrefix 依赖项属性。 | public static readonly |
StaysOpenOnEditProperty | 标识 StaysOpenOnEdit 依赖项属性。 | public static readonly |
TextProperty | 标识 Text 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
HandlesScrolling | 获取一个值,该值指示组合框是否支持滚动。 | get; |
HasEffectiveKeyboardFocus | 获取一个值,该值指示 ComboBox 是否具有焦点。 | get; |
IsDropDownOpen | 获取或设置一个值,该值指示组合框的下拉部分当前是否打开。 | get; set; |
IsEditable | 获取或设置一个值,该值指示启用或禁用 ComboBox 的文本框中的文本编辑。 | get; set; |
IsReadOnly | 获取或设置启用仅限选择模式的值,在此模式中,可选择但不可编辑组合框中的内容。 | get; set; |
IsSelectionBoxHighlighted | 确定是否突出显示 SelectionBoxItem。 | get; |
MaxDropDownHeight | 获取或设置组合框下拉部分的最大高度。 | get; set; |
SelectionBoxItem | 获取在选择框中显示的项。 | get; |
SelectionBoxItemStringFormat | 获取一个撰写字符串,该字符串指定如果选择框中的选定项显示为字符串,应如何设置该选定项的格式。 | get; |
SelectionBoxItemTemplate | 获取选择框内容的项模板。 | get; |
ShouldPreserveUserEnteredPrefix | 获取或设置指示 ComboBox 是保留用户的输入还是将输入替换为匹配的项的值。 | get; set; |
StaysOpenOnEdit | 获取或设置已打开并显示下拉控件的 ComboBox 在用户单击 TextBox 时是否将保持打开状态。 | get; set; |
Text | 获取或设置当前选定项的文本。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
GetContainerForItemOverride | 创建或标识用于显示指定项的元素。 | protected |
IsItemItsOwnContainerOverride | 确定指定项是否是(或者是否可以作为)自己的 ItemContainer 。 | protected |
OnApplyTemplate | 调用 ApplyTemplate() 时进行调用。 | public |
OnCreateAutomationPeer | 提供 ComboBoxAutomationPeer 此控件的适当实现,作为 WPF 基础结构的一部分。 | protected |
OnDropDownClosed | 当组合框的弹出窗口关闭时报告。 | protected |
OnDropDownOpened | 当组合框的弹出窗口打开时报告。 | protected |
OnIsKeyboardFocusWithinChanged | 报告 IsKeyboardFocusWithin 属性已更改。 | protected |
OnIsMouseCapturedChanged | 当 IsMouseCaptured 属性更改时调用。 | protected |
OnKeyDown | 在发生 KeyDown 附加路由事件时调用。 | protected |
OnMouseLeftButtonUp | 调用此方法以报告已释放鼠标左键。 | protected |
OnPreviewKeyDown | 在发生 PreviewKeyDown 附加路由事件时调用。 | protected |
OnSelectionChanged | 通过引发 ComboBox 事件来对 SelectionChanged 选择更改进行响应。 | protected |
PrepareContainerForItemOverride | 准备好指定的元素以显示指定的项。 | protected |
名称 | 备注 |
---|---|
当关闭组合框的下拉列表时发生。 | |
当打开组合框的下拉列表时发生。 |
在 ComboBox 内实现可选择的项。
默认情况下,ComboBoxItem 的 HorizontalAlignment设置为 Stretch 。 StackPanel 的默认水平位置是 Center 。 如果你通过StackPanel设置ComboBoxItem的 Width 属性,则会应用StackPanel的默认值,将项目居中。
ComboBoxItem是 ContentControl ,这意味着它可以包含任何类型的单个对象 (例如字符串、图像或面板) 。 有关更多信息,请参见 ContentControl 类。
若要对多个 ComboBoxItem 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ComboBoxItem 的部分和状态,请参阅 ComboBox 样式和模板。
此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题。
只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。
https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.comboboxitem?view=net-5.0
字段
名词 | 备注 | 权限 |
---|---|---|
IsHighlightedProperty | 标识 IsHighlighted 依赖项属性 | public |
属性
名词 | 备注 | 权限 |
---|---|---|
IsHighlighted | 获取一个指示是否突出显示该项的值 | get; protected set; |
方法
名词 | 备注 | 权限 |
---|---|---|
OnContentChanged | 当 Content 属性更改时调用 | protected |
OnGotKeyboardFocus | 宣布键盘焦点位于此元素上 | protected |
OnMouseEnter | 响应 MouseEnter 事件 | protected |
OnMouseLeftButtonDown | 响应 MouseLeftButtonDown 事件 | protected |
OnMouseLeftButtonUp | 响应 MouseLeftButtonUp 事件 | protected |
IsDropDownOpen:ComboBox当前是否处于打开状态(ComboBox是展开还是收缩)。
IsEditable :ComboBox的是否可编辑(是否可以进入TextBox编辑状态,能进入编辑状态不一定可以编辑ComboBox,取决于IsReadOnly)。
IsReadOnly:该值启用仅选择模式(ComboBox只选,不可编辑模式)。
MaxDropDownHeight:ComboBox的最大高度(ComboBox展开后的最大高度,最大高度大于所需高度,显示所需高度)。
SelectionBoxItem:获取显示在ComboBox中的项目(获取选中项)。
ShouldPreserveUserEnteredPrefix:ComboBox的输入匹配功能(先开启IsEditable )。
StaysOpenOnEdit:当用户单击文本区域以开始编辑时,是否使下拉控件保持打开状态;(编辑状态,ComboBox是否保持展开状态)
Text:获取或设置当前选定项的文本。
DropDownClosed、ComboBox.DropDownOpened:打开关闭ComboBox发生的事件。
IsHighlighted:获取是否突出显示该项的值。
IsSynchronizedWithCurrentItem:是否应当使 SelectedItem 与 Items 属性中的当前项保持同步的值。
SelectedIndex:当前索引,如果选择为空,则返回负一(-1)。选中项,ListBoxItem.IsSelected优先。
SelectedItem:当前选择中项,如果选择为空,则返回 null。
SelectedValue:通过使用 SelectedItem 而获取的 SelectedValuePath 的值。
SelectedValuePath:从 SelectedValue 获取 SelectedItem 的路径。
SelectionChanged:当 Selector 的选择更改时发生。
IsSelected :如果选定了项,则为 true
;否则为 false
。 默认值为 false
。
- <Window x:Class="ComboBoxDemo.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:ComboBoxDemo"
- mc:Ignorable="d"
- Title="MainWindow" Height="450" Width="600">
- <StackPanel >
- <TextBlock x:Name="tbk1" Height="30"/>
- <ComboBox x:Name="ComboBox1" Height="30" IsDropDownOpen="True" IsEditable="True" IsReadOnly="False" MaxDropDownHeight="400" ShouldPreserveUserEnteredPrefix="True" StaysOpenOnEdit="True"
- SelectedIndex="7"
- DropDownClosed="OnDropDownClosed" DropDownOpened="OnDropDownOpened" SelectionChanged="OnSelectionChanged" >
- <ComboBox.Resources>
- <Style TargetType="ComboBoxItem">
- <Style.Triggers>
- <Trigger Property="IsHighlighted" Value="True">
- <Setter Property="FontWeight" Value="Bold"/>
- <Setter Property="Foreground" Value="Red"/>
- </Trigger>
- </Style.Triggers>
- </Style>
- </ComboBox.Resources>
- <ComboBoxItem Content="Item 0" />
- <ComboBoxItem Content="Item 1"/>
- <ComboBoxItem Content="Item 2"/>
- <ComboBoxItem Content="Item 3"/>
- <ComboBoxItem Content="Item 4" IsSelected="True"/>
- <ComboBoxItem Content="Item 5"/>
- <ComboBoxItem Content="Item 6"/>
- <ComboBoxItem Content="Item 7"/>
- <ComboBoxItem Content="Item 8"/>
- <ComboBoxItem Content="Item 9"/>
- </ComboBox>
- <Label Height="30"/>
- </StackPanel>
- </Window>
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
-
- namespace ComboBoxDemo
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- static int Count = 0;
- public MainWindow()
- {
- InitializeComponent();
- }
-
- private void OnDropDownClosed(object sender, EventArgs e)
- {
- ComboBox myitem=new ComboBox();
- foreach (var item1 in (this.Content as StackPanel).Children)
- {
- if (item1 is ComboBox) myitem = (item1 as ComboBox);
- }
- foreach (var item in (this.Content as StackPanel).Children)
- {
- if (item is TextBlock) (item as TextBlock).Text = "ComboBox is DropDownClosed. Selected Item is "+ myitem.Text;
- }
- }
-
- private void OnDropDownOpened(object sender, EventArgs e)
- {
- ComboBox myitem = new ComboBox();
- foreach (var item1 in (this.Content as StackPanel).Children)
- {
- if (item1 is ComboBox) myitem = (item1 as ComboBox);
- }
- foreach (var item in (this.Content as StackPanel).Children)
- {
- if (item is TextBlock) (item as TextBlock).Text = "ComboBox is DropDownOpened. Selected Item is " + myitem.Text;
- }
- }
-
- private void OnSelectionChanged(object sender, RoutedEventArgs e)
- {
- ComboBox myitem = new ComboBox();
- foreach (var item1 in (this.Content as StackPanel).Children)
- {
- if (item1 is ComboBox) myitem = (item1 as ComboBox);
- }
- this.Title = "SelectionChanged" + (++Count);
- foreach (var item in (this.Content as StackPanel).Children)
- {
- if (item is Label) (item as Label).Content = "SelectedIndex:" + (myitem as System.Windows.Controls.Primitives.Selector).SelectedIndex + ". SelectedValve: " + (myitem as System.Windows.Controls.Primitives.Selector).SelectedValue + ".";
- }
- }
- }
- }
如下注意:Setters是Style,还是Trigger的属性,将影响样式。(注:以下代码和XAML代码的运行结果略有不同)
- myComboBoxItemStyle.Setters.Add(new Setter(ComboBoxItem.FontSizeProperty, 30.0));
- MyIsHighlightedtrigger.Setters.Add(new Setter(ComboBoxItem.FontWeightProperty, FontWeights.Bold));
完整代码如下(XAML默认,不添加任何代码即可):
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
-
- namespace ComboBoxDemo
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- static int Count = 0;
- public MainWindow()
- {
- InitializeComponent();
-
- StackPanel mystackPanel = new StackPanel();
- TextBlock mytextBlock = new TextBlock();
- ComboBox mycomboBox = new ComboBox();
- Label mylabel = new Label();
-
- mytextBlock.Name = "tbk1";
- mytextBlock.Height = 30;
-
- mycomboBox.Name = "tbk1";
- mycomboBox.Height = 30;
- mycomboBox.IsDropDownOpen = true;
- mycomboBox.IsEditable = true;
- mycomboBox.IsReadOnly = false;
- mycomboBox.MaxDropDownHeight = 400;
- mycomboBox.ShouldPreserveUserEnteredPrefix = true;
- mycomboBox.StaysOpenOnEdit = true;
- mycomboBox.SelectedIndex = 7;
- mycomboBox.DropDownClosed += OnDropDownClosed;
- mycomboBox.DropDownOpened += OnDropDownOpened;
- mycomboBox.SelectionChanged += OnSelectionChanged;
-
- Style myComboBoxItemStyle = new Style(typeof(ComboBoxItem));
- Trigger MyIsHighlightedtrigger = new Trigger { Property = ComboBoxItem.IsHighlightedProperty, Value = true };
- myComboBoxItemStyle.Setters.Add(new Setter(ComboBoxItem.FontSizeProperty, 30.0));
- MyIsHighlightedtrigger.Setters.Add(new Setter(ComboBoxItem.FontWeightProperty, FontWeights.Bold));
- MyIsHighlightedtrigger.Setters.Add(new Setter(ComboBoxItem.ForegroundProperty, Brushes.Red));
- myComboBoxItemStyle.Triggers.Add(MyIsHighlightedtrigger);
- mycomboBox.ItemContainerStyle = myComboBoxItemStyle;
-
-
- List<ComboBoxItem> list = new List<ComboBoxItem>();
- for (int i = 0; i < 10; i++)
- {
- list.Add(new ComboBoxItem());
- list[i].Content = "Item " + i;
- }
- list[4].IsSelected = true;
-
- mycomboBox.ItemsSource = list;
- mylabel.Height = 30;
- mystackPanel.Children.Add(mytextBlock);
- mystackPanel.Children.Add(mycomboBox);
- mystackPanel.Children.Add(mylabel);
-
- this.Content = mystackPanel;
- }
-
-
- private void OnDropDownClosed(object sender, EventArgs e)
- {
- ComboBox myitem=new ComboBox();
- foreach (var item1 in (this.Content as StackPanel).Children)
- {
- if (item1 is ComboBox) myitem = (item1 as ComboBox);
- }
- foreach (var item in (this.Content as StackPanel).Children)
- {
- if (item is TextBlock) (item as TextBlock).Text = "ComboBox is DropDownClosed. Selected Item is "+ myitem.Text;
- }
- }
-
- private void OnDropDownOpened(object sender, EventArgs e)
- {
- ComboBox myitem = new ComboBox();
- foreach (var item1 in (this.Content as StackPanel).Children)
- {
- if (item1 is ComboBox) myitem = (item1 as ComboBox);
- }
- foreach (var item in (this.Content as StackPanel).Children)
- {
- if (item is TextBlock) (item as TextBlock).Text = "ComboBox is DropDownOpened. Selected Item is " + myitem.Text;
- }
- }
-
- private void OnSelectionChanged(object sender, RoutedEventArgs e)
- {
- ComboBox myitem = new ComboBox();
- if(this.Content!=null)
- {
- foreach (var item1 in (this.Content as StackPanel).Children)
- {
- if (item1 is ComboBox) myitem = (item1 as ComboBox);
- }
- this.Title = "SelectionChanged" + (++Count);
- foreach (var item in (this.Content as StackPanel).Children)
- {
- if (item is Label) (item as Label).Content = "SelectedIndex:" + (myitem as System.Windows.Controls.Primitives.Selector).SelectedIndex + ". SelectedValve: " + (myitem as System.Windows.Controls.Primitives.Selector).SelectedValue + ".";
- }
- }
-
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。