Silverlight 3 PopForm


往往项目开中会用到弹出一个窗口,并且把这个窗口中所选择的值返回到起始页面;

  这个功能在ASP.NET Web Application 中很Easy的做出来;但是在SL中我们怎么来实现呢?

  先看运行的结果:

  图片看不清楚?请点击这里查看原图(大图)。

  图片看不清楚?请点击这里查看原图(大图)。

  图片看不清楚?请点击这里查看原图(大图)。

  实现步骤:

  1.我在DEMO中采用用户自定义控件来完成,这样达到通用;首先得建一个自定义控件;代码如下:

Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"></ColumnDefinition>
            <ColumnDefinition Width="40"></ColumnDefinition>
            <ColumnDefinition Width="100"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBox x:Name="txtId" Grid.Column="0" Width="95" Height="30" Grid.Row="0" VerticalAlignment="Center"
                 HorizontalAlignment="Left" MouseLeave="txtId_MouseLeave"></TextBox>
        <Canvas Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" Canvas.ZIndex="1">
            <Button x:Name="btnPop" Width="35" Height="35" Click="btnPop_Click" Content="...." 
                    HorizontalAlignment="Center" ></Button>
            <Border x:Name="popBoder" Height="340" Width="250" BorderThickness="2" Canvas.Left="20" Canvas.Top="15" 
                    CornerRadius="10" Background="#FF4EB568" Visibility="Collapsed" >
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="25"></RowDefinition>
                        <RowDefinition Height="35"></RowDefinition>
                        <RowDefinition Height="35"></RowDefinition>
                        <RowDefinition Height="200"></RowDefinition>
                        <RowDefinition Height="35"></RowDefinition>
                        <RowDefinition Height="10"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10"></ColumnDefinition>
                        <ColumnDefinition Width="40"></ColumnDefinition>
                        <ColumnDefinition Width="120"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="10"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button x:Name="btnPopClose" Click="btnClose_Click" Content="Close" Style="{StaticResource CloseButton}"
                            Grid.Row="0" Grid.Column="3" Grid.ColumnSpan="2" Canvas.ZIndex="2" />
                    <TextBlock x:Name="lblPopTitle" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" 
                               FontSize="15" Foreground="Yellow"></TextBlock>
                    <TextBlock x:Name="lblPopId" Text="ID:" Grid.Row="1" Grid.Column="1" 
                               VerticalAlignment="Center" FontSize="10"></TextBlock>
                    <TextBlock x:Name="lblPopName" Text="NAME:" Grid.Row="2" Grid.Column="1" 
                               VerticalAlignment="Center" FontSize="10"></TextBlock>
                    <TextBox x:Name="txtPopId" Grid.Row="1" Grid.Column="2" Height="25"></TextBox>
                    <TextBox x:Name="txtPopName" Grid.Row="2" Grid.Column="2" Height="25"></TextBox>
                    <Button x:Name="btnPopSearch" Grid.Row="1" Grid.Column="3" Width="60" Height="25" 
                            Content="查询" Click="btnPopSearch_Click"></Button>
                    <data:DataGrid x:Name="dgPop" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" 
                                   VerticalScrollBarVisibility="Auto"  AutoGenerateColumns="False"  IsReadOnly="True" SelectionMode="Single"  >
                        <data:DataGrid.Columns>
                            <data:DataGridTextColumn Header="ID:" Binding="{Binding ID}"  Width="50"/>
                            <data:DataGridTextColumn Header="StuName:" Binding="{Binding StuName}" Width="140" />
                        </data:DataGrid.Columns>
                    </data:DataGrid>
                    <Grid Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="3">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Button x:Name="btnPopEnter" Content="确定" Height="25"  Grid.Column="0" 
                                Width="80" Click="btnPopEnter_Click"></Button>
                        <Button x:Name="btnPopCancel" Content="取消" Height="25"  Grid.Column="1" 
                                Width="80" Click="btnPopCancel_Click"></Button>
                    </Grid>
                </Grid>
            </Border>
        </Canvas>
        <TextBox x:Name="txtName" Grid.Column="2" Width="95" Height="30" Grid.Row="0" 
                 VerticalAlignment="Center" HorizontalAlignment="Left" IsReadOnly="True"></TextBox>
    </Grid>

在这里xmal里面就没有什么说的,代码可以在Blend在来设计,就不用来看这些代码了;可以Copy在Blend 中来体会一下;

  2.后台是怎么来写的呢?

  分析:主要是控件窗体的显示与隐藏,后台服务是调用WCF+Linq来取出数据;也没有别的什么;

  1).单击Button出现popForm窗口,代码如下:

       /// <summary>
       /// 显示Pop
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void btnPop_Click(object sender, RoutedEventArgs e)
       {
           if (popBoder.Visibility == Visibility.Collapsed)
           {
               popBoder.Visibility = Visibility.Visible;
           }
       }

  2).关闭PopForm窗体的代码如下:

      /// <summary>
      /// 关闭Pop
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnClose_Click(object sender, RoutedEventArgs e)
      {
          if (popBoder.Visibility == Visibility.Visible)
          {
              popBoder.Visibility = Visibility.Collapsed;
          }
      }

注:取消事件也一样

  3).得到先重值的事件代码如下:

         /// <summary>
         /// 确定事件
          /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPopEnter_Click(object sender, RoutedEventArgs e)
        {
            if (popBoder.Visibility == Visibility.Visible)
            {
                MyWS.Student s = dgPop.SelectedItem as MyWS.Student;
                txtId.Text = s.ID;
                txtName.Text = s.StuName;
                popBoder.Visibility = Visibility.Collapsed;
            }
        }

  4).得到后台服务的事件代码如下:

/// <summary>
       /// 查询事件
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void btnPopSearch_Click(object sender, RoutedEventArgs e)
       {
           CAO.SL.Search.MyWS.WSSoapClient client = new CAO.SL.Search.MyWS.WSSoapClient();
           client.getListCompleted += new EventHandler<CAO.SL.Search.MyWS.getListCompletedEventArgs>(client_getListCompleted);
           client.getListAsync();
       }
       void client_getListCompleted(object sender, CAO.SL.Search.MyWS.getListCompletedEventArgs e)
       {
           dgPop.ItemsSource = e.Result;
       }


  到这里代码就完了;也没有过多说明,只是感觉这个功能很不错写出来与大家一起分享;


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3