在实际应用中,我们有时候的确需要弹出一个自定义的模态窗口。为此,我们可以采用Popup控件的方法来接近这个需求,当然,这里的“模态窗口”并不是真的窗口。
  为了方便大家学习,请 单击此处下载该程序的代码。
  首先,我们为Page中的Grid命名,然后添加一些测试控件txtSource和button1。
  然后,我们可以添加一个Popup控件,用于显示“模态窗口”的内容。页面代码如下:
    1      < Grid Name ="grdGrid">
    2          < Button Height ="23" Margin ="0,30,12,0" Name ="button1" VerticalAlignment ="Top" Click ="button1_Click" HorizontalAlignment ="Right" Width ="75"> Button Button >
    3          < TextBox Name ="txtSource" Height ="21" HorizontalAlignment ="Left" Margin ="28,32,0,0" VerticalAlignment ="Top" Width ="120" />
    4          < Popup Name ="popup1" Width ="300" Height ="100">
    5              < Grid Background ="Red">
    6                  < TextBox Name ="txtTarget" Height ="21" Width ="100" Margin ="0,30,150,0" />
    7                  < Button Name ="btnClose" Content ="Close" Height ="21" Width ="75" Margin ="28,32,0,0" Click ="btnClose_Click" />
    8              Grid >
    9          Popup >
   10      Grid >
  我们需要达到的效果有以下几个方面:
  1、实现“弹出窗口”的效果。
  2、“模态窗口”的效果,即“弹出窗口”后,其它控件均不能使用;“关闭窗口”后,其它控件均恢复使用。
  3、主窗口和“模态窗口”进行数据交换。
  为此编写代码如下。我们采用遍历grdGrid的子控件,并设置其IsEnabled属性为false的方法达到“模态”的效果。
    1     private void button1_Click( object sender, RoutedEventArgs e)
    2     {
    3         this.popup1.IsOpen = true;
    4 
    5         this.txtTarget.Text = this.txtSource.Text;
    6 
    7         foreach ( UIElement element in this.grdGrid.Children)
    8         {
    9             element.IsEnabled = false;
   10         }
   11     }
   12 
   13     private void btnClose_Click( object sender, RoutedEventArgs e)
   14     {
   15         this.popup1.IsOpen = false;
   16 
   17         this.txtSource.Text = this.txtTarget.Text;
   18 
   19         foreach ( UIElement element in this.grdGrid.Children)
   20         {
   21             element.IsEnabled = true;
   22         }
   23     }