事件和处理程序
当您点击Xamarin.Forms按钮时,它会触发Clicked事件。 您可以在XAML中实例化Button,但Clicked事件处理程序本身必须驻留在代码隐藏文件中。 Button只是主要用于生成事件的一组视图中的一个,因此处理事件的过程对于协调XAML和代码文件至关重要。
将事件处理程序附加到XAML中的事件就像设置属性一样简单; 事实上,它与房产环境无法区分。 XamlKeypad项目是第6章中PermySistentKeypad项目的XAML版本。它说明了在XAML中设置事件处理程序并在代码隐藏文件中处理这些事件。 它还包括在程序终止时保存键盘输入的逻辑。
如果你回顾一下SimplestKeypadPage或PersistentKey?padPage类的构造函数代码,你会看到几个循环来创建构成键盘数字部分的按钮。 当然,这正是您在XAML中无法做到的事情,但是看看XamlKeypadPage中的标记与该代码相比有多清晰:
-
<ContentPage xmlns=""
-
xmlns:x=""
-
x:Class="XamlKeypad.XamlKeypadPage">
-
<StackLayout VerticalOptions="Center"
-
HorizontalOptions="Center">
-
<Label x:Name="displayLabel"
-
Font="Large"
-
VerticalOptions="Center"
-
HorizontalTextAlignment="End" />
-
<Button x:Name="backspaceButton"
-
Text="⇦"
-
Font="Large"
-
IsEnabled="False"
-
Clicked="OnBackspaceButtonClicked" />
-
<StackLayout Orientation="Horizontal">
-
<Button Text="7" StyleId="7" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
<Button Text="8" StyleId="8" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
<Button Text="9" StyleId="9" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
</StackLayout>
-
<StackLayout Orientation="Horizontal">
-
<Button Text="4" StyleId="4" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
<Button Text="5" StyleId="5" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
<Button Text="6" StyleId="6" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
</StackLayout>
-
<StackLayout Orientation="Horizontal">
-
<Button Text="1" StyleId="1" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
<Button Text="2" StyleId="2" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
<Button Text="3" StyleId="3" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
</StackLayout>
-
<Button Text="0" StyleId="0" Font="Large"
-
Clicked="OnDigitButtonClicked" />
-
</StackLayout>
-
</ContentPage>
该文件比将每个数字Button上的三个属性格式化为三行更短,但将这些属性打包在一起使得标记的一致性非常明显,并提供清晰度而不是模糊。
最大的问题是:您宁愿维护和修改哪个? Simplest?KeypadPage或PersistentKeypadPage构造函数中的代码或XamlKeypadPage XAML文件中的标记?
这是截图。 您会看到这些密钥现在按计算器顺序而不是电话顺序排列:
退格按钮的Clicked事件设置为OnBackspaceButtonClicked处理程序,而数字按钮共享OnDigitButtonClicked处理程序。 您可能还记得,StyleId prop?erty通常用于区分共享同一事件处理程序的视图,这意味着两个事件处理程序可以在代码隐藏文件中实现,与仅代码程序完全相同:
-
public partial class XamlKeypadPage
-
{
-
App app = Application.Current as App;
-
public XamlKeypadPage()
-
{
-
InitializeComponent();
-
displayLabel.Text = app.DisplayLabelText;
-
backspaceButton.IsEnabled = displayLabel.Text != null &&
-
displayLabel.Text.Length > 0;
-
}
-
void OnDigitButtonClicked(object sender, EventArgs args)
-
{
-
Button button = (Button)sender;
-
displayLabel.Text += (string)button.StyleId;
-
backspaceButton.IsEnabled = true;
-
app.DisplayLabelText = displayLabel.Text;
-
}
-
void OnBackspaceButtonClicked(object sender, EventArgs args)
-
{
-
string text = displayLabel.Text;
-
displayLabel.Text = text.Substring(0, text.Length - 1);
-
backspaceButton.IsEnabled = displayLabel.Text.Length > 0;
-
app.DisplayLabelText = displayLabel.Text;
-
}
-
}
InitializeComponent调用的LoadFromXaml方法的部分工作涉及将这些事件处理程序附加到从XAML文件实例化的对象。
XamlKeypad项目还包括添加到页面的代码和Per?sistentKeypad中的App类,以在程序终止时保存键盘文本。 XamlKeypad中的App类与PersistentKeypad中的App类基本相同。
阅读(2705) | 评论(0) | 转发(0) |