SilverLight学习笔记--如何创建弹出子窗口并与之交互

此处我们将使用Silverlight3来创建一个子窗口,我们要达到的目标包括:
   1、子窗口从父窗口中获取信息并显示在子窗口的标题栏
   2、设置当进入子窗口时取得焦点的控件
   3、父窗口获取子窗口的相关信息包括按钮信息和文本输入框信息
实现过程如下:
首先新建项目SLChildWindow,在此项目中加入Silverligth的SLChildWindow控件,加入方式如下图

项目如下图

 


然后建立我们的界面代码和后台代码如下:
一、MainPage.xaml与MainPage.xaml.cs代码如下

MainPage.xaml代码

 

<UserControl x:Class="SLChildWindow.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
="d"
    d:DesignHeight
="188" d:DesignWidth="323" xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" FontSize="12" FontWeight="Bold">
    
<Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Left" Height="300" Width="400">
        
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10">
            
<Button Content="按钮一" Click="Button_Click1" Margin="10" HorizontalAlignment="Left"/>
            
<Button Content="按钮二" Click="Button_Click2" Margin="10" HorizontalAlignment="Left"/>
            
<TextBlock x:Name="dialogResult" Text="子窗口按下的按钮信息显示" Margin="10" Foreground="#FF4420E8" />
        
</StackPanel>
        
<dataInput:Label Height="22" Margin="150,150,96,0" Name="lblReturnTxt" VerticalAlignment="Top" Foreground="#FFFF2D3E" Background="#FFF8F8F8" />
        
<dataInput:Label Height="22" HorizontalAlignment="Left" Margin="20,150,0,0" Name="label1" VerticalAlignment="Top" Width="116" Content="从子窗口取回的数据:" />
    
</Grid>
</UserControl>

 

 

MainPage.xaml.cs代码 

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SLChildWindow
{
    
public partial class MainPage : UserControl
    {
        
private PopupWindow popupWindow;

        
public MainPage()
        {
            InitializeComponent();
            popupWindow 
= new PopupWindow();
            popupWindow.Closed 
+= new EventHandler(PopupWindow_Closed);
        }


        
private void PopupWindow_Closed(object sender, EventArgs e)
        {
            
if ((bool)popupWindow.DialogResult)
            {
                dialogResult.Text 
= "用户在子窗口按下的是确定按钮.";
                lblReturnTxt.Content 
= popupWindow.txtInput.Text.ToString();
            }
            
else
            {
                dialogResult.Text 
= "用户在子窗口按下的是取消按钮";
            }
        }

        
private void Button_Click1(object sender, RoutedEventArgs e)
        {
            popupWindow.Title 
= "按下按钮一";
            popupWindow.SetMessage(
"你按下的是按钮一.");
            popupWindow.txtInput.Text 
= "";
            popupWindow.Show();
        }

        
private void Button_Click2(object sender, RoutedEventArgs e)
        {
            popupWindow.Title 
= "按下按钮二";
            popupWindow.SetMessage(
"你按下的是按钮二.");
            popupWindow.txtInput.Text 
= "";
            popupWindow.Show();
        }
    }

    }

 

二、PopupWindow.xaml与PopupWindow.xaml.cs代码如下

PopupWindow.xaml代码

 

代码
<controls:ChildWindow x:Class="SLChildWindow.PopupWindow"
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:controls
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
           Width
="400" Height="300"
           Title
="PopupWindow" xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input">
    
<Grid x:Name="LayoutRoot" Margin="2">
        
<Grid.RowDefinitions>
            
<RowDefinition />
            
<RowDefinition Height="Auto" />
        
</Grid.RowDefinitions>
        
<TextBlock x:Name="Message" Text="" TextWrapping="Wrap"/>
        
        
<Button x:Name="CancelButton" Content="取消" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
        
<Button x:Name="OKButton" Content="确定" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />
       
        
<dataInput:Label Height="20" HorizontalAlignment="Left" Margin="46,48,0,0" Name="label1" VerticalAlignment="Top" Width="100" Content="请输入文本" />
        
<TextBox  x:Name="txtInput"  Height="60" HorizontalAlignment="Left" Margin="46,82,0,0"  VerticalAlignment="Top" Width="280" />
    
</Grid>
</controls:ChildWindow>

 

 

PopupWindow.xaml.cs代码


代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SLChildWindow
{
    
public partial class PopupWindow : ChildWindow
    {
        
public PopupWindow()
        {
                  
            InitializeComponent();
            
this.Loaded += new RoutedEventHandler(PopupWindow_Loaded);
        }

        
void PopupWindow_Loaded(object sender, RoutedEventArgs e)
        {
            
this.GotFocus += new RoutedEventHandler(PopupWindow_GotFocus);    
        }

        
void PopupWindow_GotFocus(object sender, RoutedEventArgs e)
        {
           txtInput.Focus();
           GotFocus 
-= PopupWindow_GotFocus;
        }

        
public void SetMessage(string theMessage)
        {
            Message.Text 
= theMessage;

        }

        
private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            
this.DialogResult = true;
            
        }

        
private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            
this.DialogResult = false;
        }

    }
}

 

运行效果如下:

 


 

本文程序在Silverlight3.0和VS2010环境中调试通过。本文参照了部分网络资料,希望能够抛砖引玉,大家共同学习。
(转载本文请注明出处)

前往:Silverlight学习笔记清单
posted @ 2010-02-16 10:33  wsdj  阅读(8548)  评论(2编辑  收藏  举报