小工具知识网

当前位置: 首页 > 行业知识 > C#之WPF学习之路(6)

行业知识

C#之WPF学习之路(6)

2026-10-31 04:20:57 来源:互联网转载

���录

()

内容控件(3)

GroupBox标题容器控件

()

ScrollViewer控件

ScrollBar滚动条

Slider滑动条

ProgressBar进度条

Calendar日历控件

DatePicker日期控件

Expander折叠控件

MediaElement媒体播放器


内容控件(3)

GroupBox标题容器控件

GroupBox 控件通常用于创建一个带标题的容器,用于组织其他控件,并且可以将它们分组在一起。它继承自 WPF (Windows Presentation Foundation) 中的 HeaderedContentControl 类,而 HeaderedContentControl 又继承自 ContentControl 类。

GroupBox 提供了一种将相关控件组合在一起并为它们提供标题的方法,从而改善界面的可读性和可理解性。通过将一组相关控件放置在 GroupBox 内,可以使用户更容易地理解这些控件之间的关系,并且可以通过 GroupBox 的标题来描述这组控件的目的或功能。

虽然 GroupBox 本身没有太多成员,但可以利用其基类的成员来对其进行操作和定制。ContentControl 类提供了控件内容的基本功能,而 HeaderedContentControl 则在此基础上添加了标题的支持,使得 GroupBox 具有了标题和内容的功能。通过设置 Header 属性可以指定 GroupBox 的标题,通过设置 Content 属性可以指定 GroupBox 中包含的内容。

例子:

                                                            姓名:                                年龄:                                性别:                                    男性                    女性                                        

ScrollViewer控件

ScrollViewer 用于封装一个可滚动区域,当内容尺寸过大而无法在当前界面完全显示时,可以使用它来让用户通过滚动条查看全部内容。因为 ScrollViewer 继承自 ContentControl,所以它只能包含单个子元素。如果需要在其中显示多个子元素,需要将它们放在一个集合控件中,然后将该集合控件设置为 ScrollViewer 的 Content 属性。ScrollViewer 能够响应用户的鼠标滚轮操作以及键盘命令,以实现内容的滚动。ScrollViewer 提供了一些方法,允许按照预设的增量进行内容的滚动,这使得用户可以更精准地控制滚动操作。通过监听 ScrollChanged 事件,你可以检测 ScrollViewer 的状态变化,比如滚动位置的变化等。

ScrollViewer类的定义

public class ScrollViewer : ContentControl{    public static readonly DependencyProperty CanContentScrollProperty;    public static readonly DependencyProperty PanningRatioProperty;    public static readonly DependencyProperty PanningDecelerationProperty;    public static readonly DependencyProperty PanningModeProperty;    public static readonly RoutedEvent ScrollChangedEvent;    public static readonly DependencyProperty IsDeferredScrollingEnabledProperty;    public static readonly DependencyProperty ViewportWidthProperty;    public static readonly DependencyProperty ScrollableHeightProperty;    public static readonly DependencyProperty ScrollableWidthProperty;    public static readonly DependencyProperty ExtentHeightProperty;    public static readonly DependencyProperty ViewportHeightProperty;    public static readonly DependencyProperty ContentHorizontalOffsetProperty;    public static readonly DependencyProperty ContentVerticalOffsetProperty;    public static readonly DependencyProperty HorizontalOffsetProperty;    public static readonly DependencyProperty ExtentWidthProperty;    public static readonly DependencyProperty VerticalOffsetProperty;    public static readonly DependencyProperty ComputedVerticalScrollBarVisibilityProperty;    public static readonly DependencyProperty ComputedHorizontalScrollBarVisibilityProperty;    public static readonly DependencyProperty VerticalScrollBarVisibilityProperty;    public static readonly DependencyProperty HorizontalScrollBarVisibilityProperty;     public ScrollViewer();     public bool CanContentScroll { get; set; }    public ScrollBarVisibility HorizontalScrollBarVisibility { get; set; }    public ScrollBarVisibility VerticalScrollBarVisibility { get; set; }    public Visibility ComputedHorizontalScrollBarVisibility { get; }    public Visibility ComputedVerticalScrollBarVisibility { get; }    public double HorizontalOffset { get; }    public double VerticalOffset { get; }    public double ExtentWidth { get; }    public double ExtentHeight { get; }    public double PanningDeceleration { get; set; }    public double ScrollableHeight { get; }    public double ViewportWidth { get; }    public double ViewportHeight { get; }    public double ContentVerticalOffset { get; }    public double ContentHorizontalOffset { get; }    public bool IsDeferredScrollingEnabled { get; set; }    public PanningMode PanningMode { get; set; }    public double ScrollableWidth { get; }    public double PanningRatio { get; set; }    protected internal override bool HandlesScrolling { get; }    protected internal IScrollInfo ScrollInfo { get; set; }     public event ScrollChangedEventHandler ScrollChanged;     public static bool GetCanContentScroll(DependencyObject element);    public static ScrollBarVisibility GetHorizontalScrollBarVisibility(DependencyObject element);    public static bool GetIsDeferredScrollingEnabled(DependencyObject element);    public static double GetPanningDeceleration(DependencyObject element);    public static PanningMode GetPanningMode(DependencyObject element);    public static double GetPanningRatio(DependencyObject element);    public static ScrollBarVisibility GetVerticalScrollBarVisibility(DependencyObject element);    public static void SetCanContentScroll(DependencyObject element, bool canContentScroll);    public static void SetHorizontalScrollBarVisibility(DependencyObject element, ScrollBarVisibility horizontalScrollBarVisibility);    public static void SetIsDeferredScrollingEnabled(DependencyObject element, bool value);    public static void SetPanningDeceleration(DependencyObject element, double value);    public static void SetPanningMode(DependencyObject element, PanningMode panningMode);    public static void SetPanningRatio(DependencyObject element, double value);    public static void SetVerticalScrollBarVisibility(DependencyObject element, ScrollBarVisibility verticalScrollBarVisibility);    public void InvalidateScrollInfo();    public void LineDown();    public void LineLeft();    public void LineRight();    public void LineUp();    public override void OnApplyTemplate();    public void PageDown();    public void PageLeft();    public void PageRight();    public void PageUp();    public void ScrollToBottom();    public void ScrollToEnd();    public void ScrollToHome();    public void ScrollToHorizontalOffset(double offset);    public void ScrollToLeftEnd();    public void ScrollToRightEnd();    public void ScrollToTop();    public void ScrollToVerticalOffset(double offset);    protected override Size ArrangeOverride(Size arrangeSize);    protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters);    protected override Size MeasureOverride(Size constraint);    protected override AutomationPeer OnCreateAutomationPeer();    protected override void OnKeyDown(KeyEventArgs e);    protected override void OnManipulationCompleted(ManipulationCompletedEventArgs e);    protected override void OnManipulationDelta(ManipulationDeltaEventArgs e);    protected override void OnManipulationInertiaStarting(ManipulationInertiaStartingEventArgs e);    protected override void OnManipulationStarting(ManipulationStartingEventArgs e);    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e);    protected override void OnMouseWheel(MouseWheelEventArgs e);    protected virtual void OnScrollChanged(ScrollChangedEventArgs e);    protected override void OnStylusSystemGesture(StylusSystemGestureEventArgs e); }

ScrollViewer 控件中的两个重要属性以及一个事件:

1、HorizontalScrollBarVisibility 和 VerticalScrollBarVisibility 这两个属性用于控制水平和垂直方向的滚动条的可见性。它们都是枚举类型 ScrollBarVisibility。

ScrollBarVisibility 枚举确实定义了四个值:

  • Disabled: 表示滚动条被禁用,即不显示滚动条。
  • Auto: 表示根据内容的大小自动决定是否显示滚动条。如果内容超出了 ScrollViewer 的可视区域,则会显示对应方向的滚动条,否则隐藏。
  • Hidden: 表示始终隐藏滚动条,即使内容超出了可视区域。
  • Visible: 表示始终显示滚动条,即使内容未超出可视区域。

    因此,在设置 HorizontalScrollBarVisibility="Auto" 和 VerticalScrollBarVisibility="Auto" 时,如果内容超出了可视区域,则对应方向的滚动条会自动显示,否则隐藏。而当设置为 Visible 时,无论内容是否超出可视区域,滚动条都会始终显示。

    2、ScrollChanged 事件: 这个事件在 ScrollViewer 控件的滚动位置发生变化时触发。通过订阅这个事件,你可以在滚动位置发生变化时执行相应的逻辑,例如更新界面或执行其他操作。这个事件对于监控滚动状态和执行相关逻辑非常有用。

    例子:

                                                                    
    using System.Windows;using System.Windows.Controls;namespace WpfApp2{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            AddButtonsToStackPanel();        }        private void AddButtonsToStackPanel()        {            // 添加大量按钮到 StackPanel 中            for (int i = 0; i  

    ScrollBar滚动条

    ScrollBar(滚动条):它表示一个滚动条,其中包含一个可拖动的滑块(Thumb),其位置对应于一个值。ScrollBar继承自 RangeBase 抽象基类,该类提供了处理范围值的功能,如最小值、最大值和当前值等。RangeBase 进一步继承自 Control 基类,这意味着 ScrollBar 具有控件的基本功能,如样式、模板等。

    RangeBase 类具有以下属性:

    • LargeChange:表示给 Value 属性加减的最大值。默认为 1。
    • SmallChange:表示给 Value 属性加减的最小值。默认为 0.1。
    • Value:获取或设置范围控件的当前数量。默认为 0。
    • Maximum:获取或设置 Value 属性的最大值。
    • Minimum:获取或设置 Value 属性的最小值。

      以及一个事件成员:

      • ValueChanged:当前 Value 属性发生改变时触发的事件。

        ScrollBar 控件有两个重要的属性:

        • Orientation:表示当前滚动条是水平的还是垂直的。这是一个枚举类型的属性,其值可以是 Horizontal(水平方向)或 Vertical(垂直方向)。通过设置这个属性,可以确定滚动条的方向,以便与相应的滚动内容相匹配。
        • ViewportSize:表示当前可见的可滚动内容的数量。默认值为 0。这个属性通常用于指定可见内容的大小,以便滚动条可以根据内容的实际大小进行相应的调整。例如,在一个文本框或图像浏览器中,可以使用 ViewportSize 来指定可见区域的大小,以便滚动条正确地显示内容。

          例子:

                                                      
          using System.Windows;using System.Windows.Controls;using System.Windows.Controls.Primitives;namespace WpfApp2{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            AddContent();        }        private void AddContent()        {            for (int i = 0; i  

          Slider滑动条

          Slider 滑动条和 ScrollBar 滚动条在某些情况下可以相互替代使用,因为它们都可以用于用户界面中的滑动操作,Slider也继承于RangeBase基类。

           Slider 控件的常用属性的说明:

          • IsSnapToTickEnabled: 如果设置为 true,滑块会在最近的刻度线上捕捉到,使得滑块的值总是停留在刻度线上。
          • AutoToolTipPrecision: 设置滑块值的小数点位数,用于自动工具提示显示。
          • AutoToolTipPlacement: 按下滑块时是否显示提示工具,可以设置为 None、TopLeft、BottomRight、TopRight、或 BottomLeft。
          • Interval: 设置用户按住增加或减少按钮时执行增加或减少命令的时间间隔(以毫秒为单位)。
          • Delay: 设置用户按住增加或减少按钮时延迟多少毫秒后执行命令。
          • IsDirectionReversed: 设置增加值的方向,如果为 true,增加值的方向将被反转。
          • Orientation: 设置滑块的方向,可以是水平或垂直。
          • TickFrequency: 设置刻度线之间的间隔,默认为 1.0。
          • Ticks: 设置或获取 Slider 显示的刻度线的位置。
          • SelectionStart: 设置指定选择内容的起始值,用于选择范围。
          • TickPlacement: 设置刻度线的位置,可以是 None、TopLeft、BottomRight、TopRight、或 BottomLeft。
          • IsSelectionRangeEnabled: 设置是否显示选择范围。
          • IsMoveToPointEnabled: 如果设置为 true,Thumb 会立即移动到鼠标单击的位置。
          • SelectionEnd: 设置指定选择内容的结束值,用于选择范围。

            例子:

                                                                                            
            using System.Windows;using System.Windows.Controls;using System.Windows.Controls.Primitives;namespace WpfApp2{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            slider.ValueChanged += Slider_ValueChanged;        }        private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)        {            // 当 Slider 的值改变时,更新图片的宽度和高度            image.Width = e.NewValue;            image.Height = e.NewValue;        }    }}

            ProgressBar进度条

            ProgressBar 进度条在执行长时间任务时非常有用,它可以向用户显示任务的执行进度,从而提供良好的用户体验。

            ProgressBar 控件具有 IsIndeterminate 和 Orientation 两个重要属性,它们对于控制进度条的行为和外观至关重要。

            • IsIndeterminate: 当设置为 true 时,表示进度条以动画形式展示,而不是实际表示已完成的进度。这在某些情况下很有用,特别是当任务的进度无法准确衡量时,或者任务的进度不确定时。
            • Orientation: 用于指定进度条的方向。水平方向时,进度条从左到右增长;垂直方向时,进度条从下到上增长。这使得 ProgressBar 可以适应不同的布局需求和设计风格。

              例子:

                                                                                                  
              using System.Windows;namespace WpfApp2{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();        }        private async void StartTask_Click(object sender, RoutedEventArgs e)        {            // 模拟一个长时间任务,每隔一段时间更新一次进度            for (int i = 0; i 

上一篇:妈妈怎么拼音节?

下一篇:巨兽战场怎么退服务器号?