Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2237153
  • 博文数量: 849
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8135
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
  • 认证徽章:
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(849)

文章存档

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(273)

2010年(1)

2009年(54)

2008年(66)

2007年(49)

2006年(82)

2005年(12)

分类: Android平台

2018-07-10 21:51:39

事件和处理程序

当您点击Xamarin.Forms按钮时,它会触发Clicked事件。 您可以在XAML中实例化Button,但Clicked事件处理程序本身必须驻留在代码隐藏文件中。 Button只是主要用于生成事件的一组视图中的一个,因此处理事件的过程对于协调XAML和代码文件至关重要。
将事件处理程序附加到XAML中的事件就像设置属性一样简单; 事实上,它与房产环境无法区分。 XamlKeypad项目是第6章中PermySistentKeypad项目的XAML版本。它说明了在XAML中设置事件处理程序并在代码隐藏文件中处理这些事件。 它还包括在程序终止时保存键盘输入的逻辑。
如果你回顾一下SimplestKeypadPage或PersistentKey?padPage类的构造函数代码,你会看到几个循环来创建构成键盘数字部分的按钮。 当然,这正是您在XAML中无法做到的事情,但是看看XamlKeypadPage中的标记与该代码相比有多清晰:



点击(此处)折叠或打开

  1. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  3.              x:Class="XamlKeypad.XamlKeypadPage">
  4.     <StackLayout VerticalOptions="Center"
  5.                  HorizontalOptions="Center">
  6.         <Label x:Name="displayLabel"
  7.                Font="Large"
  8.                VerticalOptions="Center"
  9.                HorizontalTextAlignment="End" />
  10.         <Button x:Name="backspaceButton"
  11.                 Text="⇦"
  12.                 Font="Large"
  13.                 IsEnabled="False"
  14.                 Clicked="OnBackspaceButtonClicked" />
  15.         <StackLayout Orientation="Horizontal">
  16.             <Button Text="7" StyleId="7" Font="Large"
  17.                     Clicked="OnDigitButtonClicked" />
  18.             <Button Text="8" StyleId="8" Font="Large"
  19.                     Clicked="OnDigitButtonClicked" />
  20.             <Button Text="9" StyleId="9" Font="Large"
  21.                     Clicked="OnDigitButtonClicked" />
  22.         </StackLayout>
  23.         <StackLayout Orientation="Horizontal">
  24.             <Button Text="4" StyleId="4" Font="Large"
  25.                     Clicked="OnDigitButtonClicked" />
  26.             <Button Text="5" StyleId="5" Font="Large"
  27.                     Clicked="OnDigitButtonClicked" />
  28.             <Button Text="6" StyleId="6" Font="Large"
  29.                     Clicked="OnDigitButtonClicked" />
  30.         </StackLayout>
  31.         <StackLayout Orientation="Horizontal">
  32.             <Button Text="1" StyleId="1" Font="Large"
  33.                     Clicked="OnDigitButtonClicked" />
  34.             <Button Text="2" StyleId="2" Font="Large"
  35.                     Clicked="OnDigitButtonClicked" />
  36.             <Button Text="3" StyleId="3" Font="Large"
  37.                     Clicked="OnDigitButtonClicked" />
  38.         </StackLayout>
  39.         <Button Text="0" StyleId="0" Font="Large"
  40.                 Clicked="OnDigitButtonClicked" />
  41.     </StackLayout>
  42. </ContentPage>
该文件比将每个数字Button上的三个属性格式化为三行更短,但将这些属性打包在一起使得标记的一致性非常明显,并提供清晰度而不是模糊。
最大的问题是:您宁愿维护和修改哪个? Simplest?KeypadPage或PersistentKeypadPage构造函数中的代码或XamlKeypadPage XAML文件中的标记?
这是截图。 您会看到这些密钥现在按计算器顺序而不是电话顺序排列:
201807102054320349
退格按钮的Clicked事件设置为OnBackspaceButtonClicked处理程序,而数字按钮共享OnDigitButtonClicked处理程序。 您可能还记得,StyleId prop?erty通常用于区分共享同一事件处理程序的视图,这意味着两个事件处理程序可以在代码隐藏文件中实现,与仅代码程序完全相同:

点击(此处)折叠或打开

  1. public partial class XamlKeypadPage
  2. {
  3.     App app = Application.Current as App;
  4.     public XamlKeypadPage()
  5.     {
  6.         InitializeComponent();
  7.         displayLabel.Text = app.DisplayLabelText;
  8.         backspaceButton.IsEnabled = displayLabel.Text != null &&
  9.         displayLabel.Text.Length > 0;
  10.     }
  11.     void OnDigitButtonClicked(object sender, EventArgs args)
  12.     {
  13.         Button button = (Button)sender;
  14.         displayLabel.Text += (string)button.StyleId;
  15.         backspaceButton.IsEnabled = true;
  16.         app.DisplayLabelText = displayLabel.Text;
  17.     }
  18.     void OnBackspaceButtonClicked(object sender, EventArgs args)
  19.     {
  20.         string text = displayLabel.Text;
  21.         displayLabel.Text = text.Substring(0, text.Length - 1);
  22.         backspaceButton.IsEnabled = displayLabel.Text.Length > 0;
  23.         app.DisplayLabelText = displayLabel.Text;
  24.     }
  25. }

InitializeComponent调用的LoadFromXaml方法的部分工作涉及将这些事件处理程序附加到从XAML文件实例化的对象。
XamlKeypad项目还包括添加到页面的代码和Per?sistentKeypad中的App类,以在程序终止时保存键盘文本。 XamlKeypad中的App类与PersistentKeypad中的App类基本相同。

阅读(103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册