基本原理是写个UserControl基类BaseUserControl在基类中实现这两个思路方法需要弹出UserControl继承这个基类就可以了具体这两个思路方法实现方式是利用SilverLightPopUp对象
如下代码就是我抄来并修改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;
解决方案下载祝大家圣诞快乐!
最新评论