5. 添加一个Cancel和一个Finish的事件处理函数。OnCancelClick方法用来关闭窗口。OnFinishClick从额面上读出输入框里的内容,组成一个联系人对象,并将它传递给Page Function注册的返回句柄。
' Closes the window when cancel button is clicked
Private Sub OnCancelClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
CType((Me.Parent), NavigationWindow).Close()
End Sub
' Creates and populates a Contact object with page data. Then calls
' the OnReturn method to pass this object along to calling class
Private Sub OnFinishClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
Dim cl As ContactList = _
CType(Application.Current.Properties("ContactList"), _
ContactList)
Dim c As Contact = New Contact()
c.FirstName = Me.txtFirstName.Text
c.LastName = Me.txtLastName.Text
c.EmailAddress = Me.txtEmailAddress.Text
Try
c.HomePage = New Uri(Me.txtHomePage.Text)
Catch generatedExceptionVariable0 As UriFormatException
c.HomePage = Nothing
End Try
OnReturn(New ReturnEventArgs(Of Object)(c))
End Sub
Private Sub OnCancelClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
CType((Me.Parent), NavigationWindow).Close()
End Sub
' Creates and populates a Contact object with page data. Then calls
' the OnReturn method to pass this object along to calling class
Private Sub OnFinishClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
Dim cl As ContactList = _
CType(Application.Current.Properties("ContactList"), _
ContactList)
Dim c As Contact = New Contact()
c.FirstName = Me.txtFirstName.Text
c.LastName = Me.txtLastName.Text
c.EmailAddress = Me.txtEmailAddress.Text
Try
c.HomePage = New Uri(Me.txtHomePage.Text)
Catch generatedExceptionVariable0 As UriFormatException
c.HomePage = Nothing
End Try
OnReturn(New ReturnEventArgs(Of Object)(c))
End Sub
6. 下面我们为ContactDetailPage1这个功能页面创建返回事件处理函数。这就是调用页面。打开UILessPageFunction.xaml.cs这个代码文件,添加返回事件的处理函数。我们会在UILessPageFunction的OnLoaded方法里初始化一个ContactDetailPage1页面。同样的,将类型参数从默认值String改成Object。
Partial Public Class UILessPageFunction
Inherits PageFunction(Of Object)
Public Sub New()
InitializeComponent()
End Sub
' The OnLoaded handler is run automatically when the class is loaded
Private Sub OnLoaded(ByVal sender As Object, _
ByVal e As RoutedEventArgs) Handles Me.Loaded
Dim pageFunction As ContactDetailPage1 = _
New ContactDetailPage1(True, 0)
AddHandler pageFunction.Return, AddressOf pageFunction1_Return
System.Windows.Navigation.NavigationService.GetNavigationService(Me).Navigate(pageFunction)
End Sub
' This is the ContactDetailPage1 page function's return handler
Sub pageFunction1_Return(ByVal sender As Object, _
ByVal e As System.Windows.Navigation.ReturnEventArgs(Of Object))
Dim cl As ContactList = _
CType(Application.Current.Properties("ContactList"), _
ContactList)
Dim c As Contact = e.Result
cl.Add(c)
End Sub
End Class
Inherits PageFunction(Of Object)
Public Sub New()
InitializeComponent()
End Sub
' The OnLoaded handler is run automatically when the class is loaded
Private Sub OnLoaded(ByVal sender As Object, _
ByVal e As RoutedEventArgs) Handles Me.Loaded
Dim pageFunction As ContactDetailPage1 = _
New ContactDetailPage1(True, 0)
AddHandler pageFunction.Return, AddressOf pageFunction1_Return
System.Windows.Navigation.NavigationService.GetNavigationService(Me).Navigate(pageFunction)
End Sub
' This is the ContactDetailPage1 page function's return handler
Sub pageFunction1_Return(ByVal sender As Object, _
ByVal e As System.Windows.Navigation.ReturnEventArgs(Of Object))
Dim cl As ContactList = _
CType(Application.Current.Properties("ContactList"), _
ContactList)
Dim c As Contact = e.Result
cl.Add(c)
End Sub
End Class
在UILessPageFunction.xaml页面里,注册OnLoaded事件处理函数:
<PageFunction
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="UILessPageFunction"
x:TypeArguments="sys:Object"
Loaded="OnLoaded"
Title="UILessPageFunction">
<Grid>
</Grid>
</PageFunction>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="UILessPageFunction"
x:TypeArguments="sys:Object"
Loaded="OnLoaded"
Title="UILessPageFunction">
<Grid>
</Grid>
</PageFunction>
7. 在Read模式情况下,我们想要email地址和主页URL这两项显示成按钮。点击email地址这个按钮应该打开默认的email应用程序,点击主页URL的按钮应该在Frame_RightPane里显示主页的内容。我们创建两个URI,在按钮的事件处理函数里,只要简单地导航到这两个URI就可以了。我们在ContactDetailPage1.xaml.cs里修改代码:
' Navigates to home page Uri. This results in the WebOC displaying
' the web site in the right hand side frame
Private Sub NavigateToHome(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
If (Not (Me.txtHomePage.Text Is Nothing)) AndAlso _
(Not (Me.txtHomePage.Text = "")) Then
System.Windows.Navigation.NavigationService.GetNavigationService(Me).Navigate(New Uri(Me.txtHomePage.Text))
End If
End Sub
' Navigates to email address as Uri. This results in the launching of
' the default mail client.
Private Sub SendEmail(ByVal sender As Object, ByVal e As RoutedEventArgs)
If Not (Me.txtEmailAddress Is Nothing) Then
System.Windows.Navigation.NavigationService.GetNavigationService(Me).Navigate(New Uri("mailto:" + Me.txtEmailAddress.Text))
End If
End Sub
' the web site in the right hand side frame
Private Sub NavigateToHome(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
If (Not (Me.txtHomePage.Text Is Nothing)) AndAlso _
(Not (Me.txtHomePage.Text = "")) Then
System.Windows.Navigation.NavigationService.GetNavigationService(Me).Navigate(New Uri(Me.txtHomePage.Text))
End If
End Sub
' Navigates to email address as Uri. This results in the launching of
' the default mail client.
Private Sub SendEmail(ByVal sender As Object, ByVal e As RoutedEventArgs)
If Not (Me.txtEmailAddress Is Nothing) Then
System.Windows.Navigation.NavigationService.GetNavigationService(Me).Navigate(New Uri("mailto:" + Me.txtEmailAddress.Text))
End If
End Sub