美丽的神话 发表于 2024-8-10 16:07:03

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

CheckBox复选框

CheckBox继续于ToggleButton,而ToggleButton继续于ButtonBase基类。
案例

前端代码
    <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>
后端代码
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);
      }
https://i-blog.csdnimg.cn/direct/e23c66cc31fc48959f83820687a5fc12.png
我们通过判定CheckBox的IsChecked属性,来获取前端用户的选择。
RadioButton单选框

RadioButton也继续于ToggleButton,作用是单项选择,所以被称为单选框。
要注意:
这个控件有一个告急属性叫GroupName——分组名称。默认值是一个空字符串。用来指定哪些RadioButton之间是互相排挤的。
案例

前端代码
    <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>
后端代码
      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);
      }
https://i-blog.csdnimg.cn/direct/d17c82b8ce054028aee3c7c72819b301.png
这时候我们发现无论怎么选就只能选一个。如果我们要求必须选择一荤一素怎么办?我们看看组的利用。
前端代码
    <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>
后端代码
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);
}
https://i-blog.csdnimg.cn/direct/0198ed0056834853a59e9df5c2f33c9e.png
此时再操纵时我们发现,红烧牛肉和糖醋排骨只能二选一,麻婆豆腐和清炒时蔬也只能二选一。
RepeatButton重复按钮

RepeatButton,顾名思义,重复执行的按钮。就是当按钮被按下时,所订阅的回调函数会不停被执行。那么,多长时间执行一次?
我们先看看它的结构界说:
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 应用示例

前端代码
<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>
后端代码
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++}");
      }
    }
https://i-blog.csdnimg.cn/direct/df8075ba5e224b9bbcc97ba7f74a97ee.png
效果表现,第一次和第二次输出时间刚好为1000毫秒,也就是Delay属性在起作用。然后,从第2次开始,每两次之间的时间隔断约莫为500毫秒,这是由于Interval属性被设置为500。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: WPF篇(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮