silverlight:[SilverLight]扩展UserControl实现弹出效果

  感觉SilverLight编程方式更像WinForm要是有WinForm中Show思路方法和ShowDialog思路方法就可以更灵活操作窗口了这次我们就来给SilverLightUserControl增加这两个思路方法:分别是Show and ShowAsModal

  基本原理是写个UserControl基类BaseUserControl在基类中实现这两个思路方法需要弹出UserControl继承这个基类就可以了具体这两个思路方法实现方式是利用SilverLightPopUp对象

  [SilverLight]扩展UserControl实现弹出效果

  如下代码就是我抄来并修改UserControl基类:

  BaseUserControl

using;
using.Net;
using.Windows;
using.Windows.Controls;
using.Windows.Documents;
using.Windows.Ink;
using.Windows.Input;
using.Windows.Media;
using.Windows.Media.Animation;
using.Windows.Shapes;
using.Windows.Controls.Primitives;
ExpandUserControl
{
  publicBaseUserControl:UserControl
  {
    #region私有字段
    Popuppopup;
    Gridgrid;
    Canvascanvas;
    #endregion
    
    ///<summary>
    ///构造
    ///</summary>
    publicBaseUserControl
    {
      popup=Popup;
      grid=Grid;
      popup.Child=grid;
     
    }
    protectedvirtualvoidOnClickOutside{}
    #region公共思路方法
    publicvoidShow
    {
      UpdateSize;
      grid.Children.Add(this);
      popup.IsOpen=true;
    }
    publicvoidShowAsModal
    {
      canvas=Canvas;
      UpdateSize;
      canvas.Background=SolidColorBrush(Colors.Black);
      canvas.Opacity=0.2;
      canvas.MouseLeftButtonDown(sender,args)=>{OnClickOutside;};
      grid.Children.Add(canvas);
      grid.Children.Add(this);
      popup.IsOpen=true;
    }
    publicvoidClose
    {
      (popup!=null)
      {
        popup.IsOpen=false;
        //popup=null;
        //grid=null;
        //canvas=null;
      }
    }
    #endregion
    #region私有思路方法
    privatevoidUpdateSize
    {
      grid.Width=Application.Current.Host.Content.ActualWidth;
      grid.Height=Application.Current.Host.Content.ActualHeight;
      (canvas!=null)
      {
        canvas.Width=grid.Width;
        canvas.Height=grid.Height;
      }
    }
    #endregion
  }
}


  代码比较简单实现Show思路方法就是PopUp里面套个Grid再加UserControl实现ShowAsModal就是PopUp里面套个Grid在增加个黑色透明度等于0.2Canvas再加上UserControlUpdateSize私有思路方法是把grid和Canvas设置成和当前显示内容同等宽高这样UserControl就可以显示在中央;提供了个OnClickOutside()虚思路方法供重载

  然后写个UserControl并继承这个BaseUserControl这里有个问题把cs文件里继承UserControl改成BaseUserCotrol后还要把xaml进行相应修改修改方式如下代码:

  MyUserControl

<uc:BaseUserControlx:Class="ExpandUserControl.UserControls.MyUserControl"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:uc="clr-:ExpandUserControl">
  <Gridx:Name="LayoutRoot"Cursor="Hand">
    <uc:DialogPanelx:Name="myDialog"Background="White"Height="80"Width="300"Title="弹出框"DragEnable="True">
      <uc:DialogPanel.Content>
        <StackPanelOrientation="Horizontal"Margin="10"HorizontalAlignment="Center">
          <ImageSource="../Images/alert_icon.png"Stretch="None"></Image>
          <TextBlockx:Name="info"TextWrapping="Wrap"VerticalAlignment="Center"FontSize="12"/>
        </StackPanel>
      </uc:DialogPanel.Content>
    </uc:DialogPanel>
  </Grid>
</uc:BaseUserControl>




  这里使用了基于Silverlight精简框架的应用 http://www.cnblogs.com/guozili/archive/2008/11/23/1338150.html里面Control控件

  方式比较简单:

  uc

MyUserControluc=MyUserControl("这是个ShowAsModal举例!");
      uc.ShowAsModal;


  解决方案下载祝大家圣诞快乐!



Tags:  silverlight2 silverlight.2.0 silverlight是什么 silverlight

延伸阅读

最新评论

发表评论