WPF学习(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮

CheckBox复选框

CheckBox继承于ToggleButton,而ToggleButton继承于ButtonBase基类。

案例

前端代码

xml 复制代码
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="今晚吃什么菜?" Margin="5"/>
        <CheckBox Name="_checkbox1" Content="红烧牛肉" Margin="5"/>
        <CheckBox Name="_checkbox2" Content="麻婆豆腐" Margin="5"/>
        <CheckBox Name="_checkbox3" Content="夫妻肺片" Margin="5"/>
        <Button x:Name="_button" Content="查看菜单"  Click="_button_Click"/>
    </StackPanel>

后端代码

csharp 复制代码
  private void _button_Click(object sender, RoutedEventArgs e)
        {
            string order = string.Empty;
            if (_checkbox1.IsChecked == true)
                order += _checkbox1.Content + ",";
            if (_checkbox2.IsChecked == true)
                order += _checkbox2.Content + ",";
            if (_checkbox3.IsChecked == true)
                order += _checkbox3.Content;
            if(!string.IsNullOrEmpty(order))
                MessageBox.Show(order);
        }

我们通过判断CheckBox的IsChecked属性,来获取前端用户的选择。

RadioButton单选框

RadioButton也继承于ToggleButton,作用是单项选择,所以被称为单选框。

要注意:

这个控件有一个重要属性叫GroupName------分组名称。默认值是一个空字符串。用来指定哪些RadioButton之间是互相排斥的。

案例

前端代码

xml 复制代码
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="今晚吃什么菜?" Margin="5"/>
        <RadioButton Name="_RadioButton1" Content="红烧牛肉" Margin="5"/>
        <RadioButton Name="_RadioButton2" Content="麻婆豆腐" Margin="5"/>
        <RadioButton Name="_RadioButton3" Content="夫妻肺片" Margin="5"/>
        <Button x:Name="_button" Content="查看菜单"  Click="_button_Click"/>
    </StackPanel>

后端代码

csharp 复制代码
        private void _button_Click(object sender, RoutedEventArgs e)
        {
            string order = string.Empty;
            if (_RadioButton1.IsChecked == true)
                order += _RadioButton1.Content + ",";
            if (_RadioButton2.IsChecked == true)
                order += _RadioButton2.Content + ",";
            if (_RadioButton3.IsChecked == true)
                order += _RadioButton3.Content;
            if(!string.IsNullOrEmpty(order))
                MessageBox.Show(order);
        }

这时候我们发现无论怎么选就只能选一个。如果我们要求必须选择一荤一素怎么办?我们看看组的使用。

前端代码

xml 复制代码
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="今晚吃什么菜?" Margin="5"/>
        <RadioButton Name="_RadioButton1" Content="红烧牛肉" GroupName="荤菜" Margin="5"/>
        <RadioButton Name="_RadioButton2" Content="糖醋排骨" GroupName="荤菜" Margin="5"/>
        <RadioButton Name="_RadioButton3" Content="麻婆豆腐" GroupName="素菜" Margin="5"/>
        <RadioButton Name="_RadioButton4" Content="清炒时蔬" GroupName="素菜" Margin="5"/>
        <Button x:Name="_button" Content="查看菜单"  Click="_button_Click"/>
    </StackPanel>

后端代码

csharp 复制代码
private void _button_Click(object sender, RoutedEventArgs e)
{
    string order = string.Empty;
    if (_RadioButton1.IsChecked == true)
        order += _RadioButton1.Content + ",";
    if (_RadioButton2.IsChecked == true)
        order += _RadioButton2.Content + ",";
    if (_RadioButton3.IsChecked == true)
        order += _RadioButton3.Content + ",";
    if (_RadioButton4.IsChecked == true)
        order += _RadioButton4.Content;
    if (!string.IsNullOrEmpty(order))
        MessageBox.Show(order);
}

此时再操作时我们发现,红烧牛肉和糖醋排骨只能二选一,麻婆豆腐和清炒时蔬也只能二选一。

RepeatButton重复按钮

RepeatButton,顾名思义,重复执行的按钮。就是当按钮被按下时,所订阅的回调函数会不断被执行。那么,多长时间执行一次?

我们先看看它的结构定义:

csharp 复制代码
public class RepeatButton : ButtonBase
{
    public static readonly DependencyProperty DelayProperty;
    public static readonly DependencyProperty IntervalProperty;
 
    public RepeatButton();
 
    public int Delay { get; set; }
    public int Interval { get; set; }
 
    protected override void OnClick();
    protected override AutomationPeer OnCreateAutomationPeer();
    protected override void OnKeyDown(KeyEventArgs e);
    protected override void OnKeyUp(KeyEventArgs e);
    protected override void OnLostMouseCapture(MouseEventArgs e);
    protected override void OnMouseEnter(MouseEventArgs e);
    protected override void OnMouseLeave(MouseEventArgs e);
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e);
    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e);
 
}

1. 属性分析

RepeatButton 自身提供了两个整型属性,分别是Delay 和Interval 。

  • Delay 属性:表示延时重复执行的毫秒数,就是说,RepeatButton被按下后会立即执行一次回调函数,如果您不松开鼠标,在等待Delay 毫秒后,就开始进行重复执行阶段。
  • Interval 属性:表示重复执行回调函数的时间间隔毫秒数

2. RepeatButton 应用示例

前端代码

xml 复制代码
  <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="食用油准备好" Margin="5 7 5 5"/>
        <RepeatButton Name="_Button1" Content="开始倒油" Delay="1000" Interval="500" Click="_Button1_Click"  Margin="5"/>
    </StackPanel>

后端代码

csharp 复制代码
public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        int count = 1;
        private void _Button1_Click(object sender, RoutedEventArgs e)
        {
            Console.WriteLine($"重复时间:{DateTime.Now.ToLongTimeString()} {DateTime.Now.Millisecond},重复次数:{count++}");
        }
    }

结果显示,第一次和第二次输出时间刚好为1000毫秒,也就是Delay属性在起作用。然后,从第2次开始,每两次之间的时间间隔大约为500毫秒,这是因为Interval属性被设置为500。

相关推荐
波音彬要多做26 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
m0_748256781 小时前
WebGIS实战开源项目:智慧机场三维可视化(学习笔记)
笔记·学习·开源
南七澄江3 小时前
各种网站(学习资源及其他)
开发语言·网络·python·深度学习·学习·机器学习·ai
机智的叉烧8 小时前
前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习
人工智能·学习·机器学习
量子-Alex9 小时前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
吉大一菜鸡9 小时前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
爱吃西瓜的小菜鸡12 小时前
【C语言】判断回文
c语言·学习·算法
小A15912 小时前
STM32完全学习——SPI接口的FLASH(DMA模式)
stm32·嵌入式硬件·学习
岁岁岁平安13 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA13 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计