技术开发 频道

在WPF中使用Window和Page功能创建向导

   8. 像我们在第一个page function里做过的一样,我们创建第二个功能页ContactDetailPage2,设定类型参数为Object。这个页面由两个TextBox组成,一个显示家庭地址,另一个显示公司地址。另外还添加一个Cancel和一个Finish按钮。

<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="ContactDetailPage2"
    x:TypeArguments
="sys:Object"
    Title
="Contact Details - 2">
  
<Grid
     Name
="RootGrid"
    VerticalAlignment
="Center"
    HorizontalAlignment
="Center" >

    
<Grid.ColumnDefinitions>
      
<ColumnDefinition Width="200"/>
      
<ColumnDefinition Width="200"/>
    
</Grid.ColumnDefinitions>
    
<Grid.RowDefinitions>
      
<RowDefinition Height="30"/>
      
<RowDefinition Height="110"/>
      
<RowDefinition Height="110"/>
      
<RowDefinition Height="60"/>
    
</Grid.RowDefinitions>

    
<!-- Labels -->
    
<TextBlock Width="100" Height="30"
        Grid.Column
="0" Grid.Row="1" > Business Address</TextBlock>
    
<TextBlock Width="100" Height="30"
        Grid.Column
="0" Grid.Row="2" > Home Address</TextBlock>

    
<!-- Input fields -->
    
<TextBox Name="txtHomeAddress" Width="200" Height="100"
             Grid.Column
="1" Grid.Row="1" TextWrapping="Wrap"
             Text
="{Binding Path=HomeAddress, Mode=TwoWay}"/>
    
<TextBox Name="txtBusinessAddress" Width="200" Height="100"
             Grid.Column
="1" Grid.Row="2" TextWrapping="Wrap"
             Text
="{Binding Path=BusinessAddress, Mode=TwoWay}"/>

    
<DockPanel Name="ButtonPanel1" Grid.Column="0" Grid.Row="3" >
      
<Button Name="btnBack" Width="100" Height="30"
              Click
="OnBackClick">Back</Button>
      
<Button Name="btnCancel" Width="100" Height="30"
              Click
="OnCancelClick">Cancel</Button>
    
</DockPanel>
    
<DockPanel Name="ButtonPanel2" Grid.Column="1" Grid.Row="3">
      
<Button Name="btnFinish" Width="100" Height="30"
              Click
="OnFinishClick">Finish</Button>
    
</DockPanel>

  
</Grid>
</PageFunction>

 

  9. ContactDetailPage2功能页的代码非常直观。再次强调要把类型参数改为Object。

Partial Public Class ContactDetailPage2
    
Inherits System.Windows.Navigation.PageFunction(Of Object)

    
Public Sub New()
        InitializeComponent()
    
End Sub

    
' Create a ContactDetailPage2 with specified edit mode value.
    ' Since we won’t be displaying this page on the right hand side
    ' Frame, this constructor does not accept and use the index
    ' of selected element in the ContactList.
    Public Sub New(ByVal editMode As Boolean, ByVal itemNumber As Integer)
        InitializeComponent()
        
Me.KeepAlive = True
        
If (editMode = False) Then
            
Dim cl As ContactList = CType(Application.Current.Properties("ContactList"), ContactList)
            
Dim c As Contact = cl(0)
            
Me.RootGrid.DataContext = c
            
Me.ButtonPanel1.Visibility = Windows.Visibility.Hidden
            
Me.ButtonPanel2.Visibility = Windows.Visibility.Hidden
        
End If

    
End Sub

    
' Navigate back if the Back button is clicked
    Private Sub OnBackClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
        System.Windows.Navigation.NavigationService.GetNavigationService(
Me).GoBack()

    
End Sub

    
' Close window if Cancel button is clicked
    Private Sub OnCancelClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
        
CType((Me.Parent), NavigationWindow).Close()
    
End Sub

    
' When the Finish button is clicked, hydrate the Contact
    ' object with page data and return to our caller, which is
    ' ContactDetailPage1 page function.
    Private Sub OnFinishClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
        
Dim c As Contact = New Contact()
        c.HomeAddress
= Me.txtHomeAddress.Text
        c.BusinessAddress
= Me.txtBusinessAddress.Text
        OnReturn(
New ReturnEventArgs(Of Object)(c))
        
Dim w As Window = _
                        
CType(Application.Current.Properties("AddContactWizard"), _
                                                               Window)
        w.Close()
    
End Sub

End Class

 

1
相关文章