目录
内容控件(3)
GroupBox标题容器控件
ScrollViewer控件
ScrollBar滚动条
Slider滑动条
ProgressBar进度条
Calendar日历控件
DatePicker日期控件
Expander折叠控件
MediaElement媒体播放器
GroupBox 控件通常用于创建一个带标题的容器,用于组织其他控件,并且可以将它们分组在一起。它继承自 WPF (Windows Presentation Foundation) 中的 HeaderedContentControl 类,而 HeaderedContentControl 又继承自 ContentControl 类。
GroupBox 提供了一种将相关控件组合在一起并为它们提供标题的方法,从而改善界面的可读性和可理解性。通过将一组相关控件放置在 GroupBox 内,可以使用户更容易地理解这些控件之间的关系,并且可以通过 GroupBox 的标题来描述这组控件的目的或功能。
虽然 GroupBox 本身没有太多成员,但可以利用其基类的成员来对其进行操作和定制。ContentControl 类提供了控件内容的基本功能,而 HeaderedContentControl 则在此基础上添加了标题的支持,使得 GroupBox 具有了标题和内容的功能。通过设置 Header 属性可以指定 GroupBox 的标题,通过设置 Content 属性可以指定 GroupBox 中包含的内容。
例子:
姓名: 年龄: 性别: 男性 女性
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 枚举确实定义了四个值:
因此,在设置 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 < 50; i++)
{
Button button = new Button();
button.Content = "Button " + (i + 1);
stackPanel.Children.Add(button);
}
}
private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
// 滚动位置发生变化时触发此事件
double horizontalOffset = scrollViewer.HorizontalOffset;
double verticalOffset = scrollViewer.VerticalOffset;
double extentWidth = scrollViewer.ExtentWidth;
double extentHeight = scrollViewer.ExtentHeight;
}
}
}
ScrollBar(滚动条):它表示一个滚动条,其中包含一个可拖动的滑块(Thumb),其位置对应于一个值。ScrollBar继承自 RangeBase 抽象基类,该类提供了处理范围值的功能,如最小值、最大值和当前值等。RangeBase 进一步继承自 Control 基类,这意味着 ScrollBar 具有控件的基本功能,如样式、模板等。
RangeBase 类具有以下属性:
以及一个事件成员:
ScrollBar 控件有两个重要的属性:
例子:
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 < 100; i++)
{
// 创建一个新的 TextBlock
TextBlock textBlock = new TextBlock();
textBlock.Text = "Content " + i;
textBlock.Margin = new Thickness(10); // 设置一些边距以增加可读性
// 将 TextBlock 添加到 StackPanel 中
stackPanel.Children.Add(textBlock);
}
}
// 滚动条值变化时的事件处理程序
private void ScrollBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
// 当滚动条的值变化时,修改 ScrollViewer 的垂直偏移量
if (scrollViewer != null)
{
scrollViewer.ScrollToVerticalOffset(e.NewValue);
}
}
}
}
Slider 滑动条和 ScrollBar 滚动条在某些情况下可以相互替代使用,因为它们都可以用于用户界面中的滑动操作,Slider也继承于RangeBase基类。
Slider 控件的常用属性的说明:
例子:
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 控件具有 IsIndeterminate 和 Orientation 两个重要属性,它们对于控制进度条的行为和外观至关重要。
例子:
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 <= 100; i++)
{
// 更新 ProgressBar 的值
progressBar.Value = i;
// 更新 TextBlock 显示的进度文本
progressText.Text = "进度: " + i + "%";
// 模拟任务执行的延迟
await Task.Delay(100);
}
// 任务完成后,显示完成消息
MessageBox.Show("任务完成!");
}
}
}
在 WPF 中,Calendar 控件提供了一个日历界面,允许用户选择日期。它用于显示日历,并允许用户选择特定日期。Calendar 控件继承自 Control 基类,具有灵活的样式和模板,可以根据需要进行自定义。
Calendar 控件是 WPF 中用于选择日期的一个常用控件,它具有一些重要的属性成员:
Calendar 控件还具有一些重要的事件成员,用于响应用户与日历交互时的各种操作:
例子:
using System.Windows;
using System.Windows.Controls;
namespace WpfApp2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
// 当用户选择了一个新的日期时,更新 TextBlock 中显示的日期
DateTime selectedDate = calendar.SelectedDate ?? DateTime.Now; // 获取选定的日期,如果为空,则使用当前日期
selectedDateText.Text = "选定日期: " + selectedDate.ToShortDateString();
}
}
}
DatePicker 和 Calendar 在某些方面确实相似,但在用户界面上有一些重要的区别,它们旨在用于不同的日期选择场景。DatePicker 控件用于选择单个日期,通常以文本框的形式显示当前选定的日期,并且可以通过弹出的日期选择器来选择新的日期。
以下是 DatePicker 控件的属性的说明:
以下是 DatePicker 控件的事件的说明:
例子:
using System.Windows;
using System.Windows.Controls;
namespace WpfApp2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void DatePicker_SelectedDateChanged(object sender, RoutedEventArgs e)
{
// 当用户选择了一个新的日期时,更新 TextBlock 中显示的日期
DateTime selectedDate = datePicker.SelectedDate ?? DateTime.Now; // 获取选定的日期,如果为空,则使用当前日期
selectedDateText.Text = "选定日期: " + selectedDate.ToShortDateString();
}
}
}
Expander 是一个内容控件,通常用于在界面上展示可展开和收缩的区域。它包含一个标题和一个内容,用户可以点击标题来展开或收缩内容。
属性成员:
事件成员:
例子:
MediaElement 是一个强大的控件,用于在 WPF 应用程序中播放音频和视频。
以下是关于 MediaElement 的介绍:
总的来说,MediaElement 是在 WPF 应用程序中播放音频和视频的重要控件之一,可以满足大多数基本的音视频播放需求,同时还具有灵活性,可根据应用程序的需要选择不同的使用模式。
以下是关于 MediaElement 控件的属性的说明:
以下是关于 MediaElement 控件的事件成员的说明:
例子:
using System.Windows;
namespace WpfApp2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void PlayButton_Click(object sender, RoutedEventArgs e)
{
mediaPlayer.Play();
}
private void PauseButton_Click(object sender, RoutedEventArgs e)
{
mediaPlayer.Pause();
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
mediaPlayer.Stop();
}
private void mediaPlayer_MediaOpened(object sender, RoutedEventArgs e)
{
// 媒体加载完成时发生的逻辑
Console.WriteLine("媒体已加载。");
}
private void mediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
// 媒体播放结束时发生的逻辑
Console.WriteLine("媒体已结束。");
}
}
}
上一篇:CS