silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在silverlight中定制自己的MessageBox(消息框)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

   在silverlight中,如果想使用“消息框”可使用下面的方法,即:HtmlPage.Window.Alert("消息框内容")。如果想要显示更加复杂的内容或定义消息框样式的话,基本上没有什么好的方法。最近在网上看到了一篇文章,该文章的作者也谈到了上面所说的话题,相关链接如下:        The Curious Incident of the messageBox in the Sil
   在silverlight中,如果想使用“消息框”可使用下面的方法,即:HtmlPage.Window.Alert("消息框内容")。如果想要显示更加复杂的内容或定义消息框样式的话,基本上没有什么好的方法。最近在网上看到了一篇文章,该文章的作者也谈到了上面所说的话题,相关链接如下:  
     The Curious Incident of the MessageBox in the Silverlight App

     在线演示如下: [url]http://silverlight.services.live.com/invoke/72193/messagebox/iframe.html[/url]

   首先是普通样式:

在silverlight中定制自己的MessageBox(消息框)

 

     接着是显示图形样式:

在silverlight中定制自己的MessageBox(消息框)


     使用新的样式风格:

在silverlight中定制自己的MessageBox(消息框)



     首先请下载本文中的源码(本人已部分修改了原文中的源码和相应的样式,以便进行DEMO演示)。下面是相应的类图和说明:
 

在silverlight中定制自己的MessageBox(消息框)



     接下来,将会以这个类图来逐个解释相应类结构信息,首先看一下messageBoxControls(相应内容见注释):

在silverlight中定制自己的MessageBox(消息框)

Code </sumMary><param NAME="result"></param>     FiredisR_522_11845@issed(messageBoxResult result)
    {
        
当绑定的事件不为空时

在silverlight中定制自己的MessageBox(消息框)

(绑定部分参见messageBox的构造函数)
         (messageBoxDismissed )
        {
            messageBoxDismissed(
thisnew messageBoxResultEventArgs() { result  result });
        }
    }

    Button yesButton;
    Button noButton;
    Button cancelButton;
    Panel rootElement;

    
 赋值信息参见generic.xaml中的"x:Name"声明

    
constString rootElement "RootElement";
    
 YesButtonElement YesButtonElement NoButtonElement NoButtonElement CancelButtonElement CancelButtonElement;

    

}

     而messageBox这个控件使用封装类结构如下(相关内容见注释):

在silverlight中定制自己的MessageBox(消息框)

Code

     其实通过上面的类,我们可以看出作者是如何在当前页面显示消息框信息的,也就是上面@L_616_24@段里
的如下@L_616_24@:
 

在silverlight中定制自己的MessageBox(消息框)

在silverlight中定制自己的MessageBox(消息框)


  realVisual 
=  UserControlContentAccessor.GetContent(uc);
  realVisual.IsHitTestVisible 
  false ;  // 使底层控件点击不可见

  parentGrid 
new  Grid(); 声明一个Grid对象,用于加载新的内容   UserControlContentAccessor.SetContent(uc, parentGrid);
 
  parentGrid.Children.Add(realVisual); 
加载realVisual内容(注:此处内容中的控制已不支持点击了)   parentGrid.Children.Add(control);  显示在上(前)面
  

在silverlight中定制自己的MessageBox(消息框)

在silverlight中定制自己的MessageBox(消息框)


      也就是通过realVisual来保存原有的页面元素信息,然后重新按指定顺序(先realVisual再messagecontrol)加载UIElement来实现显示消息框的方式,当然这种有HACK味道的做法到底效果好不好,连原作者都表示怀疑,他
本人也感觉还应有更好的Solution。

     当然realVisual变量的一个重要用处在于当消息框被关闭时,用它来还原页面中的元素,而这块@L_616_24@就是上面所说的OnDismissed方法所做的事了,@L_616_24@如下:

OnDismissed ( object message@H_857_618@BoxResultEventArgs E)
{

    messageBoxControl control 
 sender  as  messageBoxControl;

    UserControl uc 
 Application.Current.RootVisual   UserControl;

    
if  (uc  != null )
    {  
清除之前的页面UI元素,并还原页面初始时的元素设置         parentGrid.Children.Clear();
        realVisual.IsHitTestVisible 
true ;
        UserControlContentAccessor.SetContent(uc, realVisual);
    }
    

在silverlight中定制自己的MessageBox(消息框)

在silverlight中定制自己的MessageBox(消息框)


}


    这样,我们可以在应用程序中使用该类来显示相应的消息框了,其声明和使用@L_616_24@如下:
    
   
普通样式      void  OnNormalClick(  args)
    {        
        messageBox.ShowAsync(
" 简单调用, 无回调, 无状态, 无样式! " );
        
下面注释的@L_616_24@包括状态和回调事件 
        
messageBox.ShowAsync("As prevIoUsly but with a callBACk - hit NO", (s, E) =>
        
  {
        
    Debug.Assert(e.Result == messageBoxResult.No);
        
  });

        
messageBox.ShowAsync("As prevIoUsly but with state - hit YES", 101,0);">    Debug.Assert((e.Result == messageBoxResult.Yes) && ((int)e.AsyncState == 101));
        
  });             }
显示图形  OnShapeClick(  args)
    {
        message@H_857_618@Box.ShowAsync(
 Ellipse()
        {
            Width 
  80             Height 
            Fill   SolidColorBrush(Colors.Green)
        });
    }  

    
转换样式  OnChangeStyleClick(  args)
    {
        
        Style myStyle 
this .resources[ @H_258_96@myStyle  Style;

        messageBox.ShowAsync(
使用一个不同的样式              101 状态             (s, E)  =>   处理事件             {
                
 (e.Result  ==  messageBoxResult.No  &&  (( int )e.AsyncState  ))
                {
                    HtmlPage.Window.Alert(
您点击了No按钮 );
                }

                
 messageBoxResult.Yes)
                {
                    HtmlPage.Window.Alert(
您点击了Yes按钮 );
                }
            },
          myStylE);
    }
    
    
    说到这里,还有一个内容没有介绍,也就是作者所定义的两个样式文件,其中之一被放置到了generic.xaml中,以便做了控制认加载样式,其绑定直接在messageBoxControl构造函数中完成,如下:
  
public  messageBoxControl()
{
    DefaultStyleKey 
typeof (messageBoxControl);
}
    
    而另外的样式被放在了page.xaml中,以便于程序运行时访问,这里就不多作介绍了。不过本人已修改了这两个样式中的一些数值,主要是为了显示时比例更好看一些。


     好了,今天的内容就先到这里了。

     tag : silverlight,messagexBox
     作者: 代震军,daizhj
     原帖链接: [url]http://files.cnblogs.com/daizhj/silverlight_MessageBox.rar[/url]

大佬总结

以上是大佬教程为你收集整理的在silverlight中定制自己的MessageBox(消息框)全部内容,希望文章能够帮你解决在silverlight中定制自己的MessageBox(消息框)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。