当前位置:   article > 正文

WPF基础五:UI④ 条目控件ListBox_wpf selectionmode

wpf selectionmode

ListBox

包含可选项列表。

ListBox 为 ItemsControl ,这意味着它可以包含任何类型的对象的集合 (例如字符串、图像或面板) 。 有关更多信息,请参见 ItemsControl 类。

ListBox中的多个项 是可见的,不同于ComboBox ,只有选定项可见,除非 IsDropDownOpen 属性为 true 。 SelectionMode属性确定ListBox 中的多个项是否一次可选择。

SelectionMode属性确定用户一次可以选择多少项。 可以将属性设置为 Single (默认) 、 Multiple 或 Extended 。 下表描述了这些枚举值的行为。

注解
说明
Single用户一次只能选择一项。
Multiple用户可以选择多个项而无需按下修改键。
Extended通过按住 CTRL 键并单击这些项,用户可以选择多个连续项,同时按住 SHIFT 键或不连续项。

ListBox 控件通常与数据绑定一起使用。 有关详细信息,请参阅 数据绑定概述

显示大量项可能会导致性能问题。 有关详细信息,请参阅 优化性能:控件 。

自定义 ListBox 控件

若要对多个ListBox控件应用相同的属性设置  ,请使用 Style 属性。 您可以修改 ControlTemplate默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate的详细信息 ,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ListBox 的部分和状态,请参阅 ListBox 样式和模板

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。


名称备注权限

SelectedItemsProperty

标识 SelectedItems 依赖项属性public static readonly

SelectionModeProperty

标识 SelectionMode 依赖项属性。public static readonly
名称备注权限

AnchorItem

获取或设置当 SelectionMode 为 Extended 时,最初选择的项目。get; set;

HandlesScrolling

获取一个值,该值指示 ListBox 是否支持滚动。get;

SelectedItems

获取当前选定的项。get;

SelectionMode

获取或设置 ListBox 的选择行为。get; set;
名称备注权限

GetContainerForItemOverride

创建或标识用于显示指定项的元素。protected

IsItemItsOwnContainerOverride

确定指定项是否是(或者是否可以作为)自己的 ItemContainerprotected

OnCreateAutomationPeer

提供 ListBoxAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。protected

OnIsMouseCapturedChanged

当 IsMouseCaptured 属性更改时调用。protected

OnKeyDown

响应 KeyDown 事件。protected

OnMouseMove

在 ListBox 报告鼠标移动时调用。protected

OnSelectionChanged

通过引发 SelectionChanged 事件来对列表框选择更改作出响应。protected

PrepareContainerForItemOverride

准备好指定的元素以显示指定的项。protected

ScrollIntoView

使对象滚动到视图中。public

SelectAll

选择 ListBox 中的所有项。public

SetSelectedItems

设置选定项的集合。protected

UnselectAll

清除 ListBox 中的所有选择。public

ListBoxItem

表示 ListBox 中的可选项。

ListBox包含对象的集合 ListBoxItem 。 若要选择  ListBox 中的 ListBoxItem,请将 IsSelected 属性设置为 true 。

通过将 ListBoxItem 的ItemsSource 属性绑定到数据源,将ListBoxItem绑定到数据。 有关详细信息,请参阅 如何:将 ListBox 绑定到数据。 可以 ListBoxItem 通过将的 ItemTemplate 属性设置 ListBox 为来自定义的外观 DataTemplate 。 有关详细信息,请参阅 数据模板化概述

默认情况下, ListBoxItem 的 HorizontalAlignment设置为 Stretch 。 StackPanel  的默认水平位置是 Center 。 如果通过 StackPanel 设置 ListBoxItem的属性 Width,则将应用 StackPanel 的默认值,将项目居中。

ListBoxItem是 ContentControl ,这意味着它可以包含任何类型的单个对象 (例如字符串、图像或面板) 。 有关更多信息,请参见 ContentControl 类。

自定义 ListBoxItem 控件

若要对多个 ListBoxItem控件应用相同的属性设置 ,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ListBoxItem 的部分和状态,请参阅 ListBox 样式和模板

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

字段

名词备注权限
IsSelectedProperty标识 IsSelected 依赖项属性public
SelectedEvent标识 Selected 路由事件public
UnselectedEvent标识 Unselected 路由事件public

属性

名词备注权限

IsSelected

获取或设置一个指示是否选择 ListBoxItem 的值public

方法

名词备注权限
OnCreateAutomationPeer提供 ListBoxItemAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分protected
OnMouseEnter在鼠标进入 ListBoxItem 时调用protected
OnMouseLeave在鼠标离开 ListBoxItem 时调用protected
OnMouseLeftButtonDown当用户在 ListBoxItem 上按鼠标右键时调用protected
OnMouseRightButtonDown当用户在 ListBoxItem 上按鼠标右键时调用protected
OnSelected在选定 ListBoxItem 中的 ListBox 时调用protected
OnUnselected在取消选择 ListBoxItem 中的 ListBox 时调用protected
OnVisualParentChanged在列表框项的可视父级更改时调用protected

事件

名词备注权限

Selected

在选择 ListBoxItem 时发生public

Unselected

在取消选择 ListBoxItem 时发生public


XAML范例

  1. <Window x:Class="ListBoxDemo.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:ListBoxDemo"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="500" Width="600">
  9. <Grid>
  10. <StackPanel>
  11. <ListBox SelectionMode="Extended" Height="200" SelectionChanged="OnSelectionChanged">
  12. <ListBoxItem Content="ListBoxItem0"/>
  13. <ListBoxItem Content="ListBoxItem1" IsSelected="True"/>
  14. <ListBoxItem Content="ListBoxItem2"/>
  15. <ListBoxItem Content="ListBoxItem3" IsSelected="True"/>
  16. <ListBoxItem Content="ListBoxItem4"/>
  17. <ListBoxItem Content="ListBoxItem5"/>
  18. <ListBoxItem Content="ListBoxItem6" IsSelected="True"/>
  19. <ListBoxItem Content="ListBoxItem7"/>
  20. </ListBox>
  21. <TextBlock Height="200">
  22. </TextBlock>
  23. <Button Content="全选" Click="OnListBoxSelectAll"/>
  24. <Button Content="取消全选" Click="OnListBoxUnselectAll"/>
  25. </StackPanel>
  26. </Grid>
  27. </Window>
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace ListBoxDemo
  16. {
  17. /// <summary>
  18. /// MainWindow.xaml 的交互逻辑
  19. /// </summary>
  20. public partial class MainWindow : Window
  21. {
  22. public MainWindow()
  23. {
  24. InitializeComponent();
  25. }
  26. private void OnListBoxSelectAll(object sender, RoutedEventArgs e)
  27. {
  28. foreach (var item in ((sender as Button).Parent as StackPanel).Children)
  29. {
  30. if (item is ListBox) (item as ListBox).SelectAll();
  31. }
  32. }
  33. private void OnListBoxUnselectAll(object sender, RoutedEventArgs e)
  34. {
  35. foreach (var item in ((sender as Button).Parent as StackPanel).Children)
  36. {
  37. if (item is ListBox) (item as ListBox).UnselectAll();
  38. }
  39. }
  40. private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
  41. {
  42. string s = String.Empty;
  43. foreach (var item0 in (sender as ListBox).SelectedItems)
  44. {
  45. s +=(item0 as ListBoxItem).Content +"\n";
  46. }
  47. foreach (var item in ((sender as ListBox).Parent as StackPanel).Children)
  48. {
  49. if (item is TextBlock) (item as TextBlock).Text = s;
  50. }
  51. }
  52. }
  53. }

 


C#范例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. namespace ListBoxDemo
  16. {
  17. /// <summary>
  18. /// MainWindow.xaml 的交互逻辑
  19. /// </summary>
  20. public partial class MainWindow : Window
  21. {
  22. public MainWindow()
  23. {
  24. InitializeComponent();
  25. ListBox listBox = new ListBox();
  26. listBox.SelectionMode = System.Windows.Controls.SelectionMode.Extended;
  27. listBox.Height = 200;
  28. listBox.SelectionChanged += OnSelectionChanged;
  29. for (int i = 0; i < 8; i++)
  30. {
  31. listBox.Items.Add(new ListBoxItem { Content = "ListBoxItem" + i});
  32. }
  33. (listBox.Items[1] as ListBoxItem).IsSelected = true;
  34. (listBox.Items[3] as ListBoxItem).IsSelected = true;
  35. (listBox.Items[6] as ListBoxItem).IsSelected = true;
  36. TextBlock textBlock = new TextBlock { Height = 200 };
  37. Button button1 = new Button { Content = "全选" };
  38. button1.Click += OnListBoxSelectAll;
  39. Button button2 = new Button { Content = "取消全选" };
  40. button2.Click += OnListBoxUnselectAll;
  41. StackPanel mystackPanel = new StackPanel();
  42. mystackPanel.Children.Add(listBox);
  43. mystackPanel.Children.Add(textBlock);
  44. mystackPanel.Children.Add(button1);
  45. mystackPanel.Children.Add(button2);
  46. (this.Content as Grid).Children.Add(mystackPanel);
  47. }
  48. private void OnListBoxSelectAll(object sender, RoutedEventArgs e)
  49. {
  50. foreach (var item in ((sender as Button).Parent as StackPanel).Children)
  51. {
  52. if (item is ListBox) (item as ListBox).SelectAll();
  53. }
  54. }
  55. private void OnListBoxUnselectAll(object sender, RoutedEventArgs e)
  56. {
  57. foreach (var item in ((sender as Button).Parent as StackPanel).Children)
  58. {
  59. if (item is ListBox) (item as ListBox).UnselectAll();
  60. }
  61. }
  62. private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
  63. {
  64. string s = String.Empty;
  65. foreach (var item0 in (sender as ListBox).SelectedItems)
  66. {
  67. s +=(item0 as ListBoxItem).Content +"\n";
  68. }
  69. if((sender as ListBox).Parent !=null)
  70. {
  71. foreach (var item in ((sender as ListBox).Parent as StackPanel).Children)
  72. {
  73. if (item is TextBlock) (item as TextBlock).Text = s;
  74. }
  75. }
  76. }
  77. }
  78. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/493463
推荐阅读
相关标签
  

闽ICP备14008679号