呃,各位同学大家好,我是龚凤关老师。呃,上节课呢,带着同学们呃 一行一行的代码,实现了我们这个整个 ui 的 wpf 这个 ui 的 设计,然后里面呢有很多细节的地方呢,给同学们讲了很多哈, 然后同学下去再练的时候呢,也会发现各种各样的有些小问题,那老师呢,呃,今天呢就接着给同学们讲一下关于我们这个启停按钮,对吧?这两个功能按钮看似比较简单,也比较常用的功能,那么的话呢,里面涉及到了我们 w p f 当中很多知识点, 那么老师希望尽量一贯的风格呢,就是尽量通过一些小例子,让同学们呢能把这个底层的知识给学会 理解好,然后活灵活的运用在自己的这个项目中,对吧?所以大家有的时候呢,就是从一些最基础的东西呢,我们可以哎把这个知识点呢就再复杂的东西都是由这些基础东西构成的,所以大家呢一定要 哎理解清楚,然后的话呢,我们就可以灵活的运用了,对吧?那么这个停止按钮如果点否的时候呢, 它是可以就是不停止的,对吧?如果点四的话呢,这边就停止了,对吧?那么我们看看在 m v m 下我们怎么样来做这个,做这个绑定,对吧? 这两个启停按钮啊,就是这么一个情况啊,这么一个情况,那么这两个按钮呢,他肯定不是我们常规的 button, 那 你用 button 做也可以,对吧?但是呢,我们从正常的理解来讲呢,这两个 button 一定是互次的,对吧?就说他俩只能是二选一对吧,你不是说 其他的功能,哎,大家可以并列存在,对吧?大家一起启动,那这两个东西呢?一个启动,一个停止,他俩一定是互斥的,那么也就说我们会首先想到就像上面这个键面,对吧?做切换的时候呢,肯定是只能选择一个,你不能四个都选择,对吧?那么他肯定就是单选框,就是说我这个 ricochet 用我们这个 ricobot 来做,对吧?然后呢我再点击停止的时候,这个否,对吧?能取消我这个 check 的 这个事件,那这东西都怎么来做,对吧?老师带的同学们就通过一些小例子把我们的整个的这个 学到一些我们 wpf 这些,呃,前后端的这些技术啊,尤其对我们新新刚开始学的这些同学,有很多同学在练习的时候呢,就不太熟悉,对吧? 启停, ok, ok, 老师带着大家呢,咱们一点点来做这个东西,对吧?那么呢设尽量呢,我把这个知识点呢给同学都带一些,是吧?那么首先呢,我们先来一个什么呀?来个 stack panel, 对 吧? 然后默认的话是垂直一个布局,然后呢我们在这里呢就直接放一个我们这个 reach button, 然后呢我们再放一个瑞修巴特,放了两个,然后呢默认呢,我们把我们这个背景颜色呢,整个窗体这个背景颜色呢改成这个 light gray, 对 吧?浅灰色, ok, 然后默认的话呢,我们这个瑞修巴特呢,是在这里,对吧?然后这个 content 我 们来一个,这个是启动, 然后这个 content 呢,我们是来一个停止,对吧?停止,那在我们 inform 下呢?呃,这就是他这个瑞雪巴他默认的样式,那我在 inform 下呢,那都是通过这个什么 check 的 属性 check 事件,对吧?如果他被选中的话,对吧?我执行,执行什么什么东西,对吧?打答案输出一下我们这个 bit 一 check, 对 吧? vimeo 里面呢,我们都是通过这种事件的方式来去实现,对吧?实现这种效果,但是在 mavm 当中呢,我们肯定是要用 mavm 的 方式,所以这种方式我们就不要用了,对吧? 我们一点点来,那我们首先呢先把这两个 resume button 的 样式呢,我们先修改一下,这样默认的话呢,不太好看。然后呢大家一定要会用我们这个样式, 那么这两个 retro button 呢,我们只在当前那个页面下使用,对吧?其他界面上呢,没有的话,我们就可以在当前那个 window 的 方底下,然后在资源里面来写我们这个样式,那针对于这个类型呢,就是我们这个 retro button, 对 吧?你要给谁写样式,你就类型的选择谁,然后 side 呢,我们就可以首先呢设置一下它的宽度,那假如说我们给个一百二, 然后呢我们再给一下它的这个高度,对吧?一个一个标签的去写,假如说三十,那它这样的话,你给完尺寸以后,对吧?它自动呢,就跑到中间来了,要跑到中间来了,然后呢我们把它们之间呢,再设置一个什么呀?再设置一个 mark, 就是每个控件之间呢,对吧?每个 rachel button 之间呢?它上下左右,对吧?距离外边缘这个距离,我们外部的控件呢,它这个上下左右距离都是五个像素, ok, 那 么然后的话呢,我们接着来写,对吧?我们再来写什么呀?再给它真正的来写我们这个模板,那这个模板呢?我们来个 rachel button, ok, 这么一写完呢,他现在就什么都没有了,对吧?因为我现在模板是空的,对吧?我们现在给他一个 grey 的 在这外层的包裹一下,然后呢给他一个 圆角,圆角给个六, ok, 然后呢我们现在再把这个 content presenter 放里面去,这样的话呢,大家可以看一下这个 content presenter 跟我们 button 是 一样的,就是它它里面这个文本内容,对吧?现在就显示出来了。然后呢,我们简单的让他呢给他一个 垂直对齐,再来个居中对齐,然后给这个 bottom 呢,给他一个简单的给个颜色,给个白色,对吧?这个窗底背景颜色我们稍微给深一点,明显一点,这样看的清楚一点,对吧?那这两个按钮呢?现在简单的就有了,对吧?简单的有了, 然后的话呢,我们假如说还需要给这个 boder 呢添加一点这个阴影的一个效果, effect 啊,这都是很常用的手段了。我们先来个模糊,把模糊半径给个十,然后隐身呢给个五, 然后呢我们来简单看一下, ok, 就是 这样的一个效果,对吧?然后呢我们还希望让他干什么呢?嗯, 看一下,我们假如说还希望这个按下去的时候呢,他有一个动态的一个效果,那么我们就可以,对吧?简单的我们想到哪,我们写到哪,现在模板呢?假如说大致是这个样式,然后呢,我们可以在我们这个控件模板的储发器里面 来写我们的储发器,那储发器呢?就说当我们这个属性啊, is pressed 指的就是我这个 racial button, 当我这个 is pressed 为 true 的 时候,这就叫属性储发器, 对吧?就是按下的时候,鼠标按下去的时候,按这个 is pressed, 是 它的一个属性,对吧?这个 racial button, 它有这个 is pressed, 我 们看一下 is press 啊,在这里看不出来哈,我们可以在这个,呃 racial button, 我 们可以在这里哈看一下 右一个 racial button, 然后 racial button 点 is press, 对吧?它是有这样的一个属性的,对吧?这是有这样一个属性,而且它是一个只读的,对吧?不能写只读的, ok, 那 我们来看一下,那这个 racial button 呢?当我们这个按下的时候,对吧?然后呢我们设置一下我们的这个什么呀? 这个是什么啊? render transform, 就是 它的一个变换,对吧?变换,那给它设置一个什么样的变换呢?我们要给它一个平移的一个变换。 translate transform, 一个简单的一个平移,对吧?横向和纵向呢?都平移三个象数, 这个时候呢我们点击看一下,哎,他就有这样一个简单的一个平移的这样的效果啊,稍微就给用户那一个提示,哎,我现在按下了,对吧?我现在按下了, ok, 那 么的话呢,我们继续来写,那这个按钮呢?当他被单机的时候呢,对吧?我希望呢他这个颜色也会跟着变一下,对不对?那也就是说,呃,继续来写我们这个触发器,就是说当我们这个 被选中的时候,就 inspect 的 时候,那它应该是什么呢?那它应该是我们的这个背景颜色,对吧?是谁的背景颜色呢? 谁的背景颜色呢?那就应该是我们这个 target name, 也就是说我们要给这个 builder, 对 吧?给他一个名字, 那这个 border 的 背景颜色呢?一定要把它的背景颜色呢?要换成一个红色, ok, 老师讲的慢一点,对吧?那现在呢?每个单机选中了以后呢?就变成红色了,同时呢我把这个字体呢,要给它变成一个 字体,是谁的字体啊?字体是不是针对于我 racial button 呢?而不是 border 一 啊,对吧? foreground, 那 它字体颜色呢?变成白色, ok, 现在是不是就这个样子了?但是这两个按钮呢?我停止的是红色,那启动的我希望是个绿色, 那怎么办呢?我如果在触发器这样写好了的话,对吧?那包括我,我如果要多个其他按钮,我颜色,希望它们区别对待,希望它们不一样,怎么办呢?那么我们是不是就可以, 对吧?在不用附加属性的前提下,我们假如说就用我们这个按钮自身的,他自身是不是有背景颜色呀?对吧?我们假如说把它改成这个 live, 这是个绿色,然后把它呢?我们改成是个 red, 对 吧?但是你这样改完了以后,我模板当中 用的就是红色,那么模板当中怎么用这个瑞秀 button 在 这个内部去给的它这个 background 的 属性呢?我们就可以用我们这个绑定,对吧?然后向相对绑定 来向来查找,查找谁啊?查找我们这个 racial button 这个模板的这个本身,对吧?就是我们这个模,我们这个 racial button 这个控件本身 template parent parent 父亲指的是谁啊?就是我这个,你针对 这个瑞秀吧,他用的样式是他,对吧?那我这个本身呢就是我自己,我自己的这个 background, ok, 那 他呢?就是红色,那他呢?是不就把这个绿色给拿到了,对吧?这样他俩呢就做到一个区别了,对吧?做到了一个区别了, ok, 那 么的话呢,我现在还希望呢,简简单单的呢,给它再修饰一下,那么也就说在我们这个假如说在我们这个 grade 这里面,我们可不可以给它再放一点什么呢?我们想一下这个 grade 这里面我们假如说再给它放一个,放一个 grade, 再放一个 grade, 然后这个 grade 呢?我们在这里面放一个什么呢?呃?放一个 eiffel's, 对 吧?这个是一个圆,对吧?这是一个圆。假如说这个十五, 十五,然后呢?它的一个嗯 feel。 假如说我们这个给个 green 吧,这个给这个,我们给个 green, 然后这个呢?我们给个 lemon, ok, ok, 然后的话呢我们让这个 green 呢?左对齐, 左对齐,哎,在最左边。然后呢我们再给这个 grade 呢,给个 marking, 给个 mark, 给个五,左右是五,上下是零, ok, 这样的一个效果,然后的话呢, ok, 大 致是这个意思吧?大致是这个意思。然后呢我们在这个 ellipse 下面呢,我们再给一个 dog apple, 然后这个呢,我们稍微给大一点,给个二十,给个二十, ok, 稍微再大一点,再大一点,然后这个 thickness 线宽, 这个二, ok, 大家可以看到呢,我们现在这个按钮的前面呢,就有一个这样的一个标识,对吧?看起来呢稍微更好看一点,对吧?加了一个圈,我们又加了一个,呃,加了一个填充内部的一个圆,又加了一个,就是只有, 只有这个,没有填充颜色,只有这个线条的,对吧?这样的一个圆,他俩套在一起, 那么的话呢,我这个 grade 呢?默认的话呢,我希望呢?它是一个,呃 visibility, 我 希望它是一个隐藏的,对吧?它是一个隐藏的,那只有当它被选中的时候, 那它呢才应该怎么样呢?它的它的这个,那就说这个 grade 我 们也需要给个名字, 那这个 grade 的 visibility setter target name grade, 然后呢它的一个,呃 visibility 还应该是一个 to, 还应该是个 visible, 对 吧? visible, 对 吧? ok, 对 吧?选中谁呢?谁就可以看到它是停止还是启动一个状态,那么的话呢,如果说我当前是停止按钮的话,我前面这个颜色应该是红色,对不对?应该是红色, 那么如果说是启动按钮呢?我这边才是一个绿色,对吧?也是一个有区别对待的,对不对?是不是应该这样?那么的话呢, 我这边看一下,对吧?应该是有区别对待的,呃,那么的话呢,嗯, 我们可以看一下,这个是绿色,这个是红色,绿色,红色, ok, 或者说下面这个呢,我们直接给个黑色也可以 黑色我们看一下, ok, 这样看来也挺明显的,对吧?那么假如说单击下面的时候,我们可以看一下, 那么怎么区别对待呢?对吧?那这两个按钮有什么不同的呢?那就说如果说它这个 property, 如果说是这个 content, 如果是启动的话,对吧?我们就可以干什么呢?我们就可以把我们的这个,所以大家看我们大量的用到了这个触发器,对吧?然后呢我们就可以把我们的这个 feel 针对于谁啊?我们给这两个圆儿呢,给它们个名字,假如说这个叫 e l 一, 这个叫 e l 二,对吧? 它的这个 feel 属性,我们就可以给他一个什么呀?给这个,这个,然后同时呢把它的这个 property view 啊,这个应该是它的线款线条的颜色哈, stop, 它呢?也应该是这个, ok, ok, 改完了,这是 content, 这个是这个内容,如果是启动的话,我们就给这样的一个触发器,对吧?然后如果说它要是停止呢,对吧?如果说它要是停止呢? 那么我们就把这两个颜色呢,给它改成一个红色, ok, 这样的话呢就根据了内容的不同,对吧?内容也是一个属性啊,对吧?如果是启动的话是停止的话, 对吧?大家可以看这两个按钮呢,它这个颜色呢就不同了,对吧?但做的方法不一样,老师在这里呢,只是给大家为了演示我们这个储发器,对吧?可以在我们模板当中呢,可以随便的这么来用,对吧?当然还有附加属性啊,那些用法也是一样的用的哈。 然后呢,我们现在这两个按钮有了,但是我们现在呢还得希望前面这个圆呢,稍微模糊一点,看会不会效果更好一点,我们可以让这个 grade, 对 吧?这个 grade 呢?我们也给个 effect, 对 吧? grade, 我 们也给个 effect, 然后呢? 呃,我们这个 effect 呢,我们就可以用一个这个,然后我们来一个模糊的这个半径给个五,然后我们这个类型呢?我们来一个这个高斯模糊,对吧?高斯模糊大家可以看呢,它现在就是这样的一个效果,而假如说我们给它, 哎,稍微模糊的不要那么太明显,有一点,哎,大概这样子,对吧?大概这样的一个效果, 然后呢我们看一下,哎,对吧?就是这样一个启停效果了,然后简单的这个样式呢,我们就,呃,大概做到这个程度, ok, 大 概做到这个程度,那么这些东西一个准备工作我们做完了以后呢? 然后呢?我们希望这个 racial button 真正的要执行我们的功能了,对吧?执行我们功能了,那么我们就在我们这个整个的一个项目,假如说我们正常项目它肯定是有个 will model 的, 对吧? may will model, ok, 那 我们在我们这个当前这个 view 下呢,指定一下我们的这个数据,上下文应该是我们这个 new, 我 们的这个 main view model, ok, 那 么在这里边的话呢,对吧? 我们假如说有个布尔类型的这个 is checked, 假如说我们这个呢,就叫 is check, 或者说我们这个就叫什么呢?这叫 system system stop, ok, 起个这个名字啊,你们稍等一下, 那么假如说我们在当前的这个 viewmodel 下面,对吧?来执行我们的功能的话,那么执行什么功能呢?假如说我们就直接来 task 点 wrong, 对 吧?程序一启动,我们就开始不停地输出我们的内容, 每一秒钟,对吧?输出一些我们当前的时间, ctrl dot write line, 我 们的 datetime dot not 啊,就这么简单,对吧?就这么简单。然后在这里呢,我们是不是判断一下非 system stop, 对 吧?如果说我们这个 system stop 啊,这个,这个是我们停止,对吧?系统停止的这样一个布尔量,如果说它没停止,那就是说运行中,对吧? 那么我们就打印输出时间,如果它是停止的话,那我们就不输出,对吧?我们把当前这个项目呢改成我们这个控制台启动, ok, 那 么的话呢,把我们当前这个停止按钮,那它呢?这个 is check 的 属性绑定到我们这个 system, 那注意看这里的话呢,我们找这个 system, 对 吧?它不会给你智能提示,对吧?不会给你智能提示,我们只能呢手动地去把这个东西呢给拿过来,对吧? system stop, system stop, 然后这时候呢,我们先来看一下它绑定它,对吧?默认的话,我们先给它一个默认值,默认的话呢,它肯定是 true, 对 吧?系统一启动的时候,它肯定是停止的,对吧?这时候我们来看一下, 对吧?默认的话呢,这个它现在肯定是进不来这里的,对吧?我们在这里打一个断点,当我一点击这个,当我一点击这个启动的时候,大家注意看一下, ok, 这个断点是不就进来了,然后现在呢,它就不停地在打印输出了,对吧?然后呢,这个时候我单机停止,哎,它就停止了 system stop, 它就不会打印输出了,我这时候再点击启动,哎,它这个时候呢又可以了,对吧? 然后这样一个启停,当我点击启动的时候,哎,大家注意看,它可以重复的点击启动,你这样肯定是不对的,对吧?所以呢,我们重新回到我们这个触发器这里面来, 就说当我们这个选中的时候,以 check 的 属性选中的时候,我们第一个忘做了,对吧?第一个就是要做什么呢?让我们这个 is enable 的 属性,对吧?让它变为 false, 就是说当它选中的时候,它是不能再重复被单击的,重复的被选中是不可以的,对吧?你看启动的时候,它也不能重复的启动,对吧?然后这个时候呢,如果说我这个 is enable 的 属性,如果是 false 了, 我们这边是不是可以简单的再做一些触发器,对吧?我们可以在这里面说,想到哪我们写到哪,对吧?如果说我们这个 is enable 属性,如果说它为 false 了的话,我们可以干什么呢?可以让我们的当前的 透明度,对吧?给他变,可以变成这样子,对吧?这样呢,让用户就知道,哎,我这个按钮不能被点了,对吧?他已经不能被点了,他也不能被点了,对吧?只能点呼次的那个按钮,对吧?要么启动,要么停止, ok, 这就完事了。 那么这样的话呢,我们就实现这个功能,但是如果说我们在最一开始的时候呢,哎, 那有同学说,老师,你这里刚才说这里面呢,你在写的时候呢?这里没有智能提示,大家在做绑定的时候呢,也经常发现这里没有智能提示,那怎么能让他在我们设计的模式下能看到这个智能提示呢,对吧?要么的话呢,你可以这么来写,对吧?你可以直接 window data contact, 然后直接 main view model, 你 写在这里边,对吧?你这样的话呢,我们是能看到这个 system stop, 对 吧?这就有智能提示了,对吧?那还有一种什么方式呢?你这样写的话呢,就明确的指定了当前的这个 windows 的 数据上下文,就来自于这个 may vivo model, 你 后面的这行代码呢,你就可以删掉,可以不写了,对吧?这个可以不写了, 对吧?那还有一种什么情况呢?就是这个东西我不写,我干什么呢? d, 这个 d 啊,就代表我们设计模式 design, 对 吧? design model, 设计模式下,然后我们这个 d, 对 吧? design instance, 然后呢,这个 type 来自于我们这个 main wheel model, 这样写的话呢,我们可以看一下 这个 system, 它也是能识别得到的,但区别是什么呢?你这样写完了以后呢,它只是影响我当前 在设计模式下,它只是起个自动提示,让我们在绑定的时候呢,去我们这个 mayview model 当中呢,去拿我们的一些属性,对吧?做绑定 给我们能拿到这个智能提示,对吧?但是并没有真正指定了我数据上下文,所以你后面的这行代码呢,是不能省略掉。 ok, 它是有这个区别的,比如说它只是能起到一个智能提示的一个效果。 ok, 大家这地方要区分一下,那么现在我们还需要做一个什么呢?对吧?现在启停的功能呢?我们现在已经很简单的有了,当然了,那有同学说,老师呢,他这个呢, 它这里面还有 command, 对 吧?它这个 request button 呢,还有 command, 包括 command parameter 啊, target 这东西跟我们 button 的 这个功能呢,它都带命令绑定的,对吧?你可以在这里呢绑定一个后台的命令 啊,绑定一个命令,然后带一些参数进去来执行一些逻辑,也是可以的。但是呢,我们觉得呢,这样的一种方式呢,在能满足要求进去来执行一些逻辑也是可以的,但是呢,我们觉得呢,这样的一种方式呢,更加简洁,对吧?这样写起来更加简洁, 因为我这个这两个按钮呢,他是你选中下面的,上面的注定就是没选中的,对吧?选中上面的呢?下面就是没选中的,所以说我只需要把下面这个属性呢给绑定,上面这个我不用绑,不用绑 就可以了,明白了吧?上面呢就是我点上面的话,上面就被选中了, ok, 那 么我现在还需要有什么需求呢? 我还需要什么需求呢?就是我点击停止的时候,我需要弹出一个对话框,对吧?弹出一个对话框,那这个对话框呢?我得确认一下,对吧?是否需要停止,对吧?得需要一个二次确认,对吧?启动的时候不用二次确认。假如说,那么也就是说我这边 message box 点受,受什么呢?受什么呢? 那比如说我这个看一下啊, messagebox yes, no, 对 吧? yes, no, 带两个按钮,然后呢我们这边一个询问询问一下,然后这个是否是否要停止系统,对吧?就做这么一个简单的提示就可以了,然后它的返回值呢? 对吧?它有一个返回值,那如果说这个返回值,如果这个返回值等于 message 点 no 的 话,对吧?如果它选中的是 no, 那 就不停止,对吧?那不停止我怎么取消呢?我假如说直接在这里写 return 可以 吗?对吧?然后 else, 对 吧? else 的 话呢?我这边呢给我这个东西呢? system else 把它来给为 to, 对 吧? else 的 话就是正常停止,正常停止的话呢,就是 to 或者是 ok, 这个东西应该等于 value, 哈,好,启动了,对吧?启动了,哎,这里我我看一下啊,这里的话应该 else, 对 吧?如果传进来的是个 false 的 话呢?我就应该让我们这个 system store 也等于这个 value, ok 啊,这个时候呢,我们来启动看一下, ok, 启动停止,弹出个提示,我如果点否的话,哎,现在呢,好像实现了我们这个功能了,对吧?然后点击是,哎,它现在就停止了,对吧? 启动,然后停止,现在就有个二次确认,那么在这里的话呢,我们是用这个 return, 对 吧?然后在属性赋值的时候呢,这么写了一段逻辑来让我们这个单机赋,单机 no 的 时候呢,不让这个, 不让这个 to 呢?给到这个 system stop, 对 吧?而我们这个前台 check box 呢?这个瑞雪沃特呢,绑定的是我们的 system stop, 所以 说依然是 false, 对 吧?所以它就没有选中过来,对吧?它没有选中过来, ok, 那 么的话呢,这是一种方法,我们还有没有别的方法呢?那同学们想一想,我们在这里呢,就是说,呃,大家注意哈,我们在这里, 我们这里面有 click 时间,对吧?那么在我们之前给大家讲这个 preview most down, 那 这个呢,就是我们这个隧道事件,对吧?是我们的隧道事件,它是从我们这个根源处呢,呃,依次向内传递,对吧? 传到我们目标,那么它呢?对吧?它是在我们 is check 之前,它就会触发,然后在这个事件里面呢,可以对我们这个事件呢进行一个拦截,导致我们这个 is check 呢,可以不触发,对吧?所以在这个里面呢,你假如说我们在这里写一下, 对吧?假如说一点 handle 等于 two, 假如我们写了这样的一个事件,然后这时候我们来写一个看一下启动,然后我们呢单机停止,大家注意看,我现在单机停止呢,对吧? 它直接进到这里面来了,对吧?然后我后面的这里面呢,它干脆它就进不来了,大家注意看, 我们点击继续,大家注意看,我现在点击停止,它只会进到这,然后它就把事件给拦截住了,并不会进到我们这个 in check 的 这里面,对吧?进到我们这个属性复制这里面来了,对吧?那么这就这个呢,就说明它是在我们 in check 之前呢,它就会被拦截住了, 对吧?我们在这里呢可以来判断一些我们这个逻辑,如果说假如我们弹出,对吧?把刚才那段逻辑,对吧?全给它拿过来,全给它拿过来, 对吧?如果说它等于 no 的 话,我们就这样写,对吧?我们就这样写,否则的话呢我们就给传递过去,对吧?所以说我们这个地方呢,就可以给它简简单的改造成这个样子, 对吧?把这个东西呢我们改造成这个样子,在这里面还是正常的属性,然后启动停止点否,对吧?被拦截住了,然后呢?单机是哎,这个时候呢?哎,我们看一下,嗯,这个地方 它实际上呢这个拦截呢?它是这个一点 handle 是 false, 正常的话它可以向下传递的,但是因为我们这个弹出了一个这个框框, 然后所以说呢他这个事件被被中断了,哈,我们在这里的话呢,呃,这么来写,对吧?我们在这里强行的把我们呃这么来写 这个属性,强行的让它等于处,然后这个时候呢,我们来运行看一下启动停止 否的话呢?他不会停,对吧?然后如果点击试的话,哎,这时候大家发现他现在呢,实际上已经停了,对吧?实际上是已经停了,我们在这里打个断点,我们看一下, ok, 对 吧?他实际上是能进来的,他已经停了,但是为什么 我们现在在界面上看到的呢?还是启动的这个东西,它现在是处呢,对吧?好像还是启动的这个东西,它被 check 的 被选中了呢,对吧?那因为什么呢?因为我们现在这个, 我们在这里去给这个属性赋值的时候呢,大家要记住,对吧?一定要通知 ui, 否则呢 ui 是 不会有变化的,所以因此的话呢,我们在这里把我们这个 model 呢,把它实现了 i notify property, 这样的话呢,我们看一下 on raise 的 i'll be change this there is a pro index, ok, 那 ok, 我 们这样写完了以后呢,然后在我们这里边的话呢,让它通知一些 ui name of system stock 大 写, ok, 这个时候呢,我们再来运行看一下,对吧?当我们在这里启动,然后这时候再点击停止的时候, 是, ok, 它现在呢就通知 ui 发生了变化,我这个 check 的 呢,然后它就关联过来了,对吧?这个 check 呢,因为它是双向绑定的嘛, 我这个属性发生了变化以后,一定要通知 ui, 它才会触发这个更新。好了,现在的话呢,我们看式的话呢,把这个启停呢,现在这个逻辑呢,我就都都给它做完了,对吧?都给它做完了, 但是大家发现有个问题,我现在呢,那这些东西呢,是在我 v o m 了,对吧?那这个东西就不符合我 m a m 了,对吧?那这个东西呢,就不太合适了, 那么我们怎么样把这个事件,对吧?也让在 vivo model 里面去写呢,对吧?也在 vivo model, vivo model 里面去写呢,也就是说这串逻辑,我们想办法给它放到 vivo model 里面去,那也就是说这是一个事件,对吧?这是事件,那么我们就会想到 事件,跟我们 vivo model 相关联的话呢,那么就会用到我们这个 怎么把事件来进行绑定,那么就是会用到我们这个 behavior, 对 吧?经常用到的一个东西呢,老师把大家常用的这些东西呢都给大家来演示一下,对吧? behavior 行为哎, e e h behavior, 把这个东西呢,我们给它装一下, 把这个安装一下,那么安装好了以后呢,我们在这个当前这个页面下面,我们就来给它写一下 i i behaviors, 然后这个 behaviors 呢,我们应认为我们针对的是谁呢?针对于的是这个停止按钮,对吧?停止按钮,那么我们就把这个 behavior 呢,大家注意看一下,这个东西呢,我们现在可以给它注示一下, 它呢是带这两个参数的,对吧?一个 object, 一个 mouse button one x 这样的一个鼠标鼠标事件,对吧?大家一定要注意它带这样的一个参数,那么我们 为了用到这个 e 憨豆点去,所以说这里我们必须把这个第二个参数呢给传到 vivo model 当中去,这是我们的一个思路,那么在这里的话呢,我们是不是就可以把这个东西呢?我们简单的给它去掉,对吧?然后呢我们干什么呢?我们在这里针对于这个 ratio button, 我们给它放一个呃 i interaction 这个命名空间下有 triggers, 然后呢我们有这个 event trigger, 然后针对于的是谁啊? event name 应该是我,这个叫什么?一二一, review mouse mouse down, 对 吧?是这个事件,那么就把这个事件名称呢给写到这里面来, review mouse down, 然后这个事件呢, 大家注意看,对吧?它就能绑定我们这个命令了,对吧?就能把这个事件能触发一个命令,它能绑定一个命令, 对吧?假如这个命令呢,我们起个 c m d 一, ok, 那 么我们是不是就可以在 vivo model 当中来建立这样的一个命令,对吧?那怎么样来建立一个命令呢?那么我们是不是就得先建立一个?这前提是在我们没有用任何的呃 m v m 这样的一个包,包括 crazy 这样的一个包的情况下,我们手写这样的 relate really come on, 对 吧?这都是老演员了,对吧?实现一个接口,然后的话呢,在这里 c t u r 然后在这里呢,我们来一个 action, 来个委托,然后这个委托呢,它要带一个参数, action, 然后 this action 的 action, 然后这里呢, 命令呢,肯定是允许允许使用的,对吧?然后呢,我们让这个 action 呢,来 invoke parameter 传进来一个参数, ok, 那 么这样的话呢,我们在我们当前这个 view model 里面呢,我们就可以定义这样的一个 relay command ready command, 然后起的名字呢,就叫 c m d 一, ok, 然后这个 c m d 一 呢,我们可以在我们当前这个 real model 的 这个勾导函数里面呢,我们就可以拗一个 ready command, 然后在这里呢,我们在这里是不是就可以传进去一个拆除 e, 对 吧?然后这个 e 呢?就指的是谁啊?这个 e, 我 们在这里打一个断点, 然后我们是不是可以把我们刚才的那段逻辑,对吧?把这段逻辑我们全给它拿过来,对吧? 全拿到这里面来,把这个注是给解解掉,对吧?是否要停止,那这个 e 呢?就这个 e 一 点撼动,那这个 e 我们是不是在这里就要判断一下 if e is 什么类型啊?对吧?什么类型?大家注意刚才那个没有,那个是不是往 mouse button 一 万 x, 如果它是这个类型, ok, 如 i s, 这里要这么 写这个了, ok, 是 不是这么一个逻辑,然后我们在这里呢来打一个断点,我们看这个 e 这个参数能不能被传进来 启动,对吧?现在打印,然后停止,然后现在进来了,这个 e 是 什么呢? e 是 n, 大家看到没有?这个 e 是 n, 那 下面一定会报错的,对吧? 是吧?你这个这个 e f 条件就进不来了,那这个 e 为什么没有作为参数被传递进来呢?大家注意在我们这个事件短命令这里面呢,一般的 x to command 传递我们这个参数到这个命令啊,把它改为 q, 这个时候呢我们再启动运行看一下 启动, ok, 这时候呢,我们再来停止,这个意义呢?我们大家发现它就拿到了我们这个 mouse button 一 半的 x, 拿到这个参数,然后呢我们就可以弹出,哎,询问否,那么的话呢?否呢?它就会拦截,对吧?会拦截 就不往下传递了,然后这个时候呢,如果说我在单机,我如果点击试的话,对吧?我如果点击试的话, 那它就应该能进到这里面来,对吧?那么它呢会会正常的把它呢复制为 q, 然后通知 ui, 然后现在就实现了这个切换,现在的话呢,我们是不是就在 view 下呢,就没有写任何的东西了,对吧?把 view 下面的这个 拦截给写到了我们这个 vivo model 当中来,对吧?大家看整个这个过程呢,就是关于我们这个 behavior, 对 吧事件转命令这样的一些用法,对吧?停止, ok, 那 回顾一下呢,整个这里面的话呢,我们用到了这个样式,然后以及触发器啊,然后呢大家一定要活学活用,对吧?关于这个绑定 啊,然后呢,呃,关于我们这个 ipkv 事件转命力,以及我们这个 后台的这个通知,通知 ui, 那 这些东西呢,都是我们这个 wpf 当中经常用的东西,那么在做项目的时候呢,很多时候都是这些功能综合的来套在一起来用,大家一定要哎灵活的去给他把各种知识点都理解透彻的基础上, 然后去用在自己的这个项目中,好吧,那大家有任何问题呢?呃,都可以加关老师微信进我们学员群,那近期呢,很多这个同学做出来这个项目呢,都已经呃落地了,都已经很漂亮哈, 然后实现的业务逻辑呢,都非常清晰啊,所以大家加油坚持,老师会一直陪伴大家的啊啊,谢谢大家。
粉丝2297获赞3709

这一张我们开始来学习这个 radio button, 同样呢我们把这个类的全称复制一下,复制到这个微软的 go on 里面,搜索这个 api, 我们点击进去看一下,这边有个定义,就是表示这个可以由用户选择,但是不能清除的按钮,当然这个用户肯定不是我们的。然后后面这边说了,可以通过单机来设置这个一字切克的的这个雷迪欧巴坦这个属性, 但只能以编程的方式清除该属性。同样的我们在这边添加添加一个这个窗口, 这个窗口的名称 我们叫这个 window radio button 啊,我把这个页面的这个布局变成百分之九十, 同样的我们在这个 gray 的下面写一个这个 radio button, radio button 这边是不是只有一个这样的一个圆圈,并没有实践内容,这个内容呢?我们可以在这个 这个内容,我们可以在这个监控号中间书写, 比如说我在这边写上一个科目语文,这样就可以看到了。然后我们也可以在这个 ctrl 的里面书写这个内容, 如果我们在这个 ctrl 的里面编写了,编写了东西,那么我们便不能在这个标签这个里面写文本。这边提醒的是多次设置了这个 ctrl 的属性, 如果需要使用这个抗震等,我们直接把这个语文复制到他这个里面去。 嗯,在这边我们把这个字体设置一下字体大小, 好,我们设置为 二十变大一点 肢体颜色,我们也给他设置一下,就叫蓝色吧。 在这边我们把它的一个水平排列,垂直排排列给设置一下, 首先我们设置一下他的一个垂直排列方向,他居上,然后一个水平排列方式,我们居组 按这样的方式, 我们复制几个这样的一个六六八腾空间,这样看我们 复制了这么多,实际上只看到一个,这个原因是他们的位置都是一样的,他们是重叠在一起的,所以在这边我们要设置一下他的一个 marking, 在这边我们只需要把他的一个左边距变大一点,左边距我们就设成五十吧,然后后面我们设置为零,也就是他的上边距为零, 五十好像有点小啊,这个我们就设成七十, 这个我们就射成一百四,然后二百一,让他们的这个间距就是相等的。 你看这个后面的这个他们这个 v 六八的这个标签内容,他的一个间距基本上都是差不多的啊。 然后我们再把他的一个内容给换一下,我们换成数学、 历史、外语, 在这边我们需要把它这个启动像同样的在这边换一下, 我们点击启动 是不是起到了一个单选的一个效果, 这四个选择,这四个选项我们只能选择一项, 那么比如在这边我们再进行一个这样的选项, 这个选项呢?我们是针对这个性别,性别的一个选项, 我们把它复制过来。 i'm 女,我把这颜色改一下啊,改成红色, 嗯,这个叠在最后面,然后我们把它的一个, 然后,然后在这边我们把他这个 mark 给你调一下,这个第一个是左边距,左边距我们就调小一点,调成十, 这个要调大一点啊,这个是第二个我们调成八十,然后他的一个上面距我们就调成一百吧, 同样的我们启动一下, 在这边我们如果要选择男女,这样效果看似是实现了,但是我们点击这个语文的时候,这个单选就跑到上面去了, 其实我们是想把上面的一个科目作为一个单独的一个单选,然后下面这个男女作为一个单独的单选,那我们该怎么办呢? 别着急,我们可以使用一个这样的一个布局空间,因为我们这边只学到了这个格瑞的啊, 使用其他的一个布局空间,到后面我们讲到的时候,你也可以进行一个尝试。在这边我们先用这个布局 空间,我们把这个我们在这个格瑞的里面又新增了一个格瑞的,然后我们把刚才的这个男女这两个选项粘贴到这个格瑞的这个标签里面, 我们再启动一下, 我们可以看到是不是这上面的这个单选跟这个下面的单选他是分开的,这个上面的这个单选不会影的影响到这个下方,下方呢也不会影响到他上方, 当然我们也可以写成这样,再套一层,这样子可 可以的。那这个还有什么其他的方法把这个进行一个分组呢?这样写起来是不是比较麻烦?我们总要在外面套一层这个布局空间,有没有更直观的一个方式呢? 答案是有的。在这里面我们看到这边有一个这样的势力,他可以单独创建一个瑞流巴特这样的一个主, 在这下方他使用了这个 gulp name, 也就是他的进行了一个分组,如果这个组名一样,这几个就归于一组, 我们把这个 good name 复制到这里面,我们先把这个格外的统统给他去掉。 我们进一个分组,我们这个第一个分组肯定是性别 six, 第二个这个分组,我们就叫这个课程 course 把它复制下来,我们再启动一下,看一下效果, 我们发现没有,他这个进行了一个分组,进行了一个归类,当这些空间归于一组的时候,他这个单选项 效果是在这个足里面展示的。在这里面我们写一下笔记啊, radio button, 如果需要实现分组的效果, 一,使用布局容器来嵌套这个布局容器,我们有如 grade, stock, panel 等等。然后第二个 第二个就比较简单了,可以使用 group name 进行区分分组, 我们把这个代码复制 radio button 的演示代码,把这个效果也放上去。


同学们,今天我们学习单选按钮,单选按钮也是比较简单的一个空间 radio 八层,那么这个单选按钮一般是结合这个 radio group 来进行管理的。 熟悉呢,比较简单,就一个 check 就判断是否选中,那我们直接上代码,我们仍然新建一个 activity, 点击 finish, 那我们需要把这个 activity 设置为我们的一个启动 activity, 我们修改一下配置, 然后修改一下清单文件,将这个属性设置为初,然后我们运行一下,现在我们项目已经运行好了,然后我们开始编写我们的代码, 将我们的根部局改为 mineral out, 给他一个方向, orientation, 给一个 vertical。 那刚才我们说了,我们是要结合 radio group 一起使用 radio group radio button, 然后我们就写城市嘛,北京, 然后我给他取一个 id, 方便待会我们进行选中的一个判断。北京 上海。 修改一下,这个是上海, 这个是广州, 这个是深圳, 那可以看一下效果,然后我们下面再给他一个 text view, 用来显示我们选中的, 给他一个 id, 就是 ct 吧, 那我们这个 video group 也要取一个 id, 然后我们去初始化一下,我们先运行看下效果, 那我们现在来初始化一下, 然后呢?还有一个是我们这个文本框也要触索一下, 然后现在我们就要需要给他设置一个监听,监听我们选中的是哪一个 啊?这个代码已经提示出来了,我们就看一下,那么就 set on check change listener 就是当我们选中的, 当我们选中的状态发生变化的时候,那我去判断一下,那么就判断我们选中的这个 id, 如果是北京的话,我们这个城市负一个值, 就把复制的这个城市复制到这里来,北京、上海、深圳还差一个广州好像, 那我们运行看一下效果,我们选中北京,选上海、广州、深圳,那这样都是可以切换的, 我们改一下这个, 现在选中的是上海、 广州、深圳、北京,那么这个单选框是比较简单的,那同学们回去把这个代码练习一下,那这个是设置监听, 今天的学习内容就到这里,记得点赞关注哦!

可视化 radio button, 实现颜色选择,我们来演示一下,找到一个 radio button, 在这个地方展开,可以添加, 在 text 写上选项, 在这个地方要给他关联一个变量, 定义变亮 color select, 它是一个运腿型,同时定义一个颜色变亮,注意它是双字类型。 给他关联一个颜色,选择变量, 再放一个圆形, 找到它的 color variable 属性, 给他关联变量, 做一个 tax field 百分号 s, n, u 鞋, 然后再 textword 吧,给它关联刚才这个颜色选择颜色选择代码是这样写的,我们可以复制一份, 把它改一下 select e。 利用 case 语句,当它等于零的时候, 把颜色复制为红色。等于一的时候,把它复制为绿色。 等于二的时候,把它复制为蓝色。等于三的时候,把它复制为黄色。 这八位数代表是 r, g, b。 颜色两个为一组,分别代表透明度,红色,绿色,蓝色。登录演示一下效果, 红色,绿色,蓝色,黄色。可以看到这个数字也是在变化,分别是零,一,二,三。

挑战说出以下 ue 控件中英文名称,切换按钮 switch toggle 用于我们打开或者关闭某些设置,比如我们电脑里的打开蓝牙设置或者关闭设置。 单选框 radio button, 当选项里只能选择一个的时候,我们就用 radio button segmented control 分 段空间常常用于内容的切换。 复选框 check box, 当选项中我们允许用户可以一次选择多个选项的时候,我们就用 check box 下拉框 drop down, 当有多个选项的时候,或者你的显示空间有限的时候,我们可以用 drop down。 弹窗 dialog, 当我们需要用户确认或者立刻操作的时候,可以显示 dialog, 比如说 google file 这里我想要共享这个文件,但是共享之前这个文件需要先被命名。

然后我们再讲一下,因为它是一个安卓系统嘛,所以可以进行一个手机调餐软件的下载,然后今天就讲一下如何下载手机调餐软件,然后我们先找到这个浏览器 打开,然后搜索这个, 当然要先进行 wifi 的 连接, 这边一定要先连接上, 然后我们找到安卓这个 app, 点击下载就可以了, 然后这边就会提示有一个下载的进度条, 下载完之后安装就可以了,安装好之后就是在这个 这边就已经能找到这个 speed 的 地面站了,我们点进去, 然后点击这个黄色的就可以进行连接搜索设备,这个只支持啊 wifi 支持,只支持使用这个飞控的 wifi 连接。然后我这边正好有一个飞控,我们给它通电试一下,这边就识别到了这飞控,我们点击立即连接, 然后点击飞控调餐, 这样就可以进行呃地面站上的设置这些端口。 ok, 感谢您的观看,祝你爽飞不炸机。

用 python 提升你的能力进阶片十二点二点五 redo button 单选按钮类 在前面的课程中,我们学习了使用 w x python 模块创建一个简单 g y 程序的方法。 我们也学习了 w x pacing 模块中 starting text 类 text ctrl 类 button 类的用法。这节课我们学习一下 redo button 单选按钮类。 首先我们介绍一下 radio battinglay。 在 w x python 中, radio battinglay 也称为单选按钮类,用于创建单选按钮控件。该控件通常表现为一组用户从多种可选 按钮中选择一个选项。我们可以使用 w x python 创建 redo button 空键,它的语法格式如下, 我们主要使用了 w x 点 radio button 这个函数,创建了一个 radio button 对象,并辅织给了变量 r b e。 其实这个对象呢,就是创建的 radio button 空键。 w x 点 radio button 这个函数的参数比较多,其中 parent 表示该空间的副窗口, i d 表示标识符,参数值为负一,表示可以自动创建一个唯一的标识符。 la 宝用于设置显示在按钮上的文本。 p o s 用于设置该控 键的位置,参数为 w x 点 point 对象或原组 size 用于设置该空间的长宽,参数为 w x 点 size 对象或原组内部用于设置空间的名称。 style 仅用于每组按钮的中的第一个按钮,该参数值为 w x 点 r b 下滑线。 global 对于每组中的随后的按钮,参数值可设置为 w x 点 r b 下滑线申稿或选择默认值。 下面我们做一个例题演示实践一下。应用 w x passing 库创建一个 d y 程序,该程序包含一组单选按钮。我们演示实践一下。 打开 sublime text 编辑器,点击 file new file, 按 ctrl s 保存,我们将它保存在地盘的 practice 文件加下,将它命名为十二杠九点 p y 按 enter 键。 首先呢,我们要引入 w x, 然后呢,我们创建 my frame late。 创建 my frame, 我们创建的这个类要继承 w x 点 frame 这个类。然后呢,我们定义它的构造函数 参数为 self parent id。 然后我们在构造函数中调用 wx 点 frame 这个类的构造函数, 它的参数为 self parent id title, 我们将 title 设置为 my frame, 然后是它的 side 子,也就是它的长宽, 我们设置它为长为五百,宽为二百。 然后呢,我们创办创建一个画板控件,并复制给变量 panel, 我们使用 w x 点 panel 这个函数。 然后呢,我们创建第一个单选按钮类,我们使用了这个类的实力属性 r b 一为 w x 第二 radio button, 然后它的副窗口为画板空间, id 为一。然后呢, labor l a labor, 我们设置为李白, 它的位置为一百二零,也就是距离窗口左上角的距离。 我们将它的样式 style 设置为 w x 点 r b 下滑线 group。 然后呢,我们创建第二个单选按钮类,并复制给变量 self 点儿 r b 二 为 w x 点 radio button, 它的副窗口为画板空间, id 为二 labor, 这次我们设置为杜甫, 它的位置为啊一百四零。 然后呢,我们创建第三个单选按钮空间。同样使用了实力属性 self r b 三 w x 点 radio button, 它的副窗口为画板空间, id 为三 label 呢,我们设置为苏式。然后呢,它的位置为一百六零。 然后呢,我们创建第四个单选按钮空间, self 点 r b 四,然后是 w x 点 redo button, 它的副窗口为画板空间, id 为四 label。 我们这次设置为李清照 星照,我们将它的位置设置为一百八十, 按 ctrl s 保存一下。这样呢,我们就将 my frame late 创建完成了。下面呢,我们使用主程序的方法创建 g y 程序 if men。 首先呢,我们要使用应用程序类创建应用程序对象,并复制给变量 a p p。 我们使用了 w x 点 a p p 啊这个函数。 然后呢,我们创建窗口类,并复制给变量 free。 我们使用我们自己创建的这个类 my free parent 为 nine, id 为负一。 然后呢,我们使用窗口类的数这个方法显示窗口。 然后呢,我们调用应用程序对象的主实践循环。 第二 men loop, 按 ctrl s 保存。我们运行一下这段代码,打开 windows 等命令行窗口,我们在其中输入 python 十二杠九 有点皮,外按 alt 键, 大家可以看一下。这次呢,我们将这个 d y 程序创建出来了,也就是这个窗口,我们可以点击这个单选按钮,点击这个单选按钮, 我们关闭一下这个窗口。 我们创进了单选按钮对象。之后就可以应用单选按钮类中常用的方法, 大家可以看一下这张表格,这张表格罗列的 video button 类常用的方法。我们可以使用 set value 这个方法呢,以编程的方式选择或取消选择按钮。我们可以使用盖头歪柳这个方法用于确定按钮是否被选中,如果按钮被选中,则返回出,否则返回 false。 我们可以使用 get v 六这个方法用于获取空间的标签文本,我们可以使用办的这个方法绑定世界。 下面我们介绍一下 redo button 类绑定单机时间的方法。在 w x python 中呢,当一组单选按钮中的按钮被 点击时,则 w x 点 radio button 的事件绑定器 w x e v t 下划线 radio button 触发相关的处理程序 序,下面我们做一个例题演示,实践一下。应用 w x python 库创建一个 g y 程序,该程序包含一组单选按钮,需设定按钮的选项, 如果选择某按钮,则打印该按钮的标签文本,我们演示实践一下。 打开 sublime text 编辑器,点击 file new file, 按 ctrl s 保存,我们将它保存在地盘的 practice 文件加下,将它命名为十二杠十点 p y 按一条键。 由于十二杠十点 p y 这个代码呢,和十二杠九点 p y 有很多的相同之处,我们将它的相同 之处复制一下,然后我们粘贴,按 ctrl s 保存。我们创建了一个 myc frame, 这个类中呢,包含了四个 radio batting 空键。 然后呢,我们要给这个 redo button 空间呢设置呃它的选项以及绑定事件。 首先呢,我们将它的初始设置选项呢为 呃第三个单选按钮,我们使用 r b 三点 set value 这个方法, set 要大写第一个字母要大写 set value, 然后呢, set value 处, 然后呢,我们绑定事件 b i n d, 我们绑定呢单机事件,我们使用 w x 点二 呃 e v t 下划线 redue button。 然后呢,我们使用 self 点 on video 和 rope 呃这个方法。然后呢,我们隔一横,我们 创建这个方法 d f on 呃 radio group 这个方法,它的参数为 self, 然后 event。 首先呢,我们要捕获呃这个单击事件的对象,然后并辅织给变量 r b。 我们使用 even 点 get event object 这个方法捕获了这个点击事件的这个对象。 然后呢,我们获取它的内容并复制 变量 toys, 也就是单选按钮标签儿的内容,使用 r b 点 get label 这个方法。最后呢,我们要打印这个标签内容, choice and ctrl s 保存。我们已经将这个类创建完成,下面呢,我们将使用主程序的方法创建这个 g y 程序 if men。 首先呢,我们要创建应用程序对象并复制给变量 a p p 然后呢,我们创建窗口对象并复制给变量 frame。 我们使用我们自己创建的这个 my frame lay parent 呢为 nine, 然后它的 id 为负一。然后呢,我们显示这个窗口。 然后呢,我们调用应用程序对象的主事件循环 a p p 点儿闷录,按 ctrl s 保存。我们运行一下这段代码,打开 windows 的命令行窗口,我们在其中 输入 python 十二杠十点 p y and 键。 大家可以看一下我们创建的这个 j y 程序,也就是这个窗口,它初始的情况下,它是选择了第三个按钮苏式,我们我们将这两个窗口拉开一下,我们将它放在下面。 我们选择李白,大家可以看一下这个地方打印了李白。我们选择杜甫这个地方打印了杜甫。 我们选择苏轼,这个地方打印了苏轼。我们选择李清照,这个地方打印了李清照。我们关闭一下这个窗口,我们再看一下这段代码。这段代码中呢,我们 使用了 redo 八听类中的 sat value 这个方法呢,设置它的初始选项。然后呢,我们使用办的这个方法呢?绑定,嗯,这个单机事件 主要使用了 w x 点一 went 下滑线 radio button, 呃,这个参数值,也就是事件绑定器,然后它绑定了我们创建的这个方法 self on radio group, 然后我们创建了这个这个类的方法 on video group。 实际上呢,我们使用了 event get event object 这个方法呢,调取了,呃,补货了 单击事件的对象。然后呢,我们使用 get label 获取标签的内容,最后打印了标签的内容。