• C#编程之WPF控件开发(十二)


    今天我们继续上一章用户要求另外一个更改,将每次按键按下都有相应的事件发生。作为程序猿我们理所当然的首先想到的就是订阅事件。

    对于wpf来说,订阅事件入口定义其实是很简单,有两种方法:

    一:

    直接通过vs自带的属性功能直接添加事件入口函数名称即可:

    即选中按键,在右侧工具栏属性项下选中已选择的元素事件的句柄,在Click输入事件入口函数名称:

    之后,编译器会自动为你生成一个入口函数

           private void Click_submiit(object sender, RoutedEventArgs e)
            {
    
            }

    我们只要在其内加入我们的算法即可;

    二:同样,为了装逼,我们也可以自己在AXML编写代码实现订阅事件:

    <Button Grid.Row="2" Grid.Column="0" Name="submit" Margin="2" Click="Click_submiit" >View message</Button>

    当然这一步只是定义事件函数名称,我们还需要在cs中定义我们的事件函数:

    private void Click_submiit(object sender, RoutedEventArgs e)
    {
    
    }

    总之,不管我们装逼还是做小白,我们的最终目的是算法。所以算法才是我们最难解决的事情。这里我们就不提用户那些奇葩的要求了。我们按我们自己的讲解的目的是订阅事件这一宗旨为出发点就好了。当然为了,完善事件处理,我们加入一个简单的算法。代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace WpfControls
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public int number = 0;
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Click_submiit(object sender, RoutedEventArgs e)
            {
                firstName.Text = number.ToString();
                number++;
                lastName.Text = number.ToString();
            }
    
            private void Click_clean(object sender, RoutedEventArgs e)
            {
                firstName.Text = "";
                lastName.Text = "";
                number = 0;
            }
        }
    }
    View Code

    AXML:

    <Window x:Class="WpfControls.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border x:Name="Border" CornerRadius="20" BorderBrush="PaleGreen" BorderThickness=" 1">
                                <Border.Background>
                                    <LinearGradientBrush StartPoint=" 0,0.5" EndPoint=" 1,0.5" Opacity=" 0.5">
                                        <GradientStop Color="Green" Offset=" 0.0"/>
                                        <GradientStop Color="White" Offset=" 1.0"/>
                                    </LinearGradientBrush>
                                </Border.Background>
                                <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsPressed" Value="true">
                                    <Setter TargetName="Border" Property="Background">
                                        <Setter.Value>
                                            <LinearGradientBrush StartPoint=" 0,0.5" EndPoint="1,0.5">
                                                <GradientStop Color="Blue" Offset="0.0"/>
                                                <GradientStop Color="Red" Offset="0.5"/>
                                            </LinearGradientBrush>
                                        </Setter.Value>
                                    </Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <Grid>
            <Grid.Background>
                <LinearGradientBrush StartPoint="0,1.5" EndPoint="0.5,0.1" Opacity="0.2">
                    <LinearGradientBrush.GradientStops>
                        <GradientStop Color="Green" Offset="0.0"/>
                        <GradientStop Color="LightBlue" Offset="0.75"/>
                        <GradientStop Color="LightCoral" Offset="1.2"/>
                    </LinearGradientBrush.GradientStops>
                </LinearGradientBrush>
            </Grid.Background>
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Label Grid.Column="0" FontSize="14" FontWeight="Bold">Entry your First Name:</Label>
            <TextBox Grid.Row="0" Grid.Column="1" Name="firstName" Margin="0,5,10,5"/>
            <Label Grid.Row="1">Entry your Last Name:</Label>
            <TextBox Grid.Column="1" Grid.Row="1" Name="lastName" Margin="0,5,10,5"/>
            <Button Grid.Row="2" Grid.Column="0" Name="submit" Margin="2" Click="Click_submiit" >View message</Button>
            <Button Grid.Row="2" Grid.Column="2" Name="Clear" Margin="2" Click="Click_clean">Clean Name</Button>
        </Grid>
    </Window>
    View Code

    接下来,我们继续我们所围绕的主题——控件外观设计

    某天,用户觉得我们的界面实在是太死板了。他们提出要求必须添加一些动态效果出来才行!好吧,苦逼的我们是无所不能的!我们将在下一章中介绍,如何为控件添加动态效果。

    End.

    谢谢.

  • 相关阅读:
    开通博客第一天
    Vue 打包配置productionSourceMap 的记录
    supervisorctl 的 简单记录
    mvn打包方式记录
    springboot日志配置,关于logback
    springboot集成swagger
    关于mapper文件的bean
    elasticsearch 连接、操作记录
    关于前后端分离文件上传的些许问题
    代码优化--策略模式的四种表现
  • 原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/11909619.html
Copyright © 2020-2023  润新知