时间:2021-05-19
原理:使用Popup控件,并且设置Popup控件的位置居中。
1:新建自定义控件PopupBorder,作为Popup的child。代码如下:
复制代码 代码如下:
<UserControl x:Class="SLStudy.PopupBorder"
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">
<UserControl.Resources>
<Storyboard x:Name="myStoryboard">
<DoubleAnimation
Storyboard.TargetName="LayoutRoot"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0" Duration="0:0:1"
AutoReverse="True" />
</Storyboard>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" >
<!--<Border Background="#FFCC0D0D" BorderThickness="0" CornerRadius="5">-->
<Border BorderThickness="0" CornerRadius="5">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF27A3D7" Offset="0.51"/>
<GradientStop Color="#FF76C2E1" Offset="0.004"/>
<GradientStop Color="#FF27A3D7" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Border.Effect>
<DropShadowEffect BlurRadius="10" Color="#FFCC0D0D" ShadowDepth="0"/>
</Border.Effect>
<TextBlock x:Name="txtMessage" HorizontalAlignment="Center" Margin="10" VerticalAlignment="Center"
FontSize="28" Foreground="White" FontFamily="Comic Sans MS"
>This is a Simple Example</TextBlock>
</Border>
</Grid>
</UserControl>
复制代码 代码如下:
<Grid x:Name="LayoutRoot">
<StackPanel>
<Button Content="Show" Click="ShowPopup_Clicked"></Button>
</StackPanel>
</Grid>
后台cs代码为:
复制代码 代码如下:
private void ShowPopup_Clicked(object sender, RoutedEventArgs e)
{
Popup popup = new Popup();
//设置popup的Child属性为自定义的用户控件。
popup.Child = new PopupBorder();
popup.IsOpen = true;
}
复制代码 代码如下:
popUp.LayoutUpdated += delegate
{
popUp.Margin = new Thickness(
(App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
(App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
0,
0);
};
完整的代码如下:
复制代码 代码如下:
PopupBorder pborder = new PopupBorder();
Popup popUp = new Popup();
//设置popup的Child属性为自定义的用户控件。
popUp.Child = pborder;
popUp.LayoutUpdated += delegate
{
popUp.Margin = new Thickness(
(App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
(App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
0,
0);
};
popUp.IsOpen = true;
运行可以发现弹出的消息已经居中了,那么如何让它自动消失呢??,
要想自动消失还得使用定时器,过了一段时间后定时器将popUp控件的 IsOpen属性设置为false,这样窗口就关闭了。
于是在LayoutUpdated中增加定时器代码:
复制代码 代码如下:
popUp.LayoutUpdated += delegate
{
popUp.Margin = new Thickness(
(App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
(App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
0,
0);
System.Threading.Timer timer = new System.Threading.Timer(
(state) =>
{
popUp.Dispatcher.BeginInvoke(() =>
{
popUp.IsOpen = false;
});
}, null, 500, 500);
};
在过了500秒后,将popUp. IsOpen设置为false。
运行可以发现窗口可以自动消失了。
可以看到弹出窗口一下就关闭了,那么能不能慢慢的渐变的消失呢??
为了实现渐变的消失,那么就应该使用动画了。
首先在PopupBorder中增加
复制代码 代码如下:
<UserControl.Resources>
<Storyboard x:Name="myStoryboard">
<DoubleAnimation
Storyboard.TargetName="LayoutRoot"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0" Duration="0:0:1"
AutoReverse="True" />
</Storyboard>
</UserControl.Resources>
当然上面的PopupBorder代码中已经有了这段代码了,动画使用了DoubleAnimation,设置LayoutRoot 对象的Opacity属性在1秒的时间内从1,变到0。
接着在PopupDemo页面的按钮事件里面在popUp.Child = pborder;后面增加如下代码来执行动画:
复制代码 代码如下:
//设置popup的Child属性为自定义的用户控件。
popUp.Child = pborder;
pborder.myStoryboard.Completed += delegate
{
popUp.IsOpen = false;
};
pborder.myStoryboard.Begin();
然后将Clicked中的代码进行重构。
新建MessageBoxHelper类:
代码如下:
复制代码 代码如下:
public class MessageBoxHelper
{
#region 提示消?息¡é
/// <summary>
/// 弹出提示消息标题为提示,按钮为确定
/// </summary>
/// <param name="msg"></param>
public static void ShowMessage(string msg)
{
//ShowFriendMessage(msg, "提示", MessageBoxButton.OK);
PopupBorder pborder = new PopupBorder();
pborder.txtMessage.Text = " " + msg + " ";
pborder.UpdateLayout();
Popup popUp = new Popup();
popUp.Child = pborder;
pborder.myStoryboard.Completed += delegate
{
popUp.IsOpen = false;
};
pborder.myStoryboard.Begin();
popUp.InvokeOnLayoutUpdated(() =>
{
popUp.Margin = new Thickness(
(App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
(App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
0,
0);
System.Threading.Timer timer = new System.Threading.Timer(
(state) =>
{
popUp.Dispatcher.BeginInvoke(() =>
{
popUp.IsOpen = false;
});
}, null, 500, 500);
});
popUp.IsOpen = true;
}
/// <summary>
/// 弹出提示消息按钮为确定
/// </summary>
/// <param name="msg"></param>
public static void ShowMessage(string msg, string title)
{
ShowMessage(msg, title, MessageBoxButton.OK);
}
/// <summary>
/// 弹出提示消息
/// </summary>
/// <param name="msg"></param>
public static void ShowMessage(string msg, string title, MessageBoxButton buttons)
{
MessageBox.Show(msg, title, buttons);
}
#endregion
}
使用的时候只需要MessageBoxHelper.ShowMessage(“Hello World”);就可以了。注意别忘记了PopupBorder控件。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言这篇文章主要介绍的是,如何实现点击按钮,弹出“正在加载数据,请稍候…”对话框,加载完了之后,对话框自动消失呢?其实也是很简单的看下面代码:importcom
php中弹出对话框的方法如下,一般,在提交信息后需要弹出对话框提示,之后可以自动关闭对话框,弹出对话框有下面集中方法,其实都是利用javascript中的ale
以QQ8.4.8版本为例,qq好友删了,聊天记录会自动消失。这是因为聊天记录是存在于该好友的对话框界面的,删除后对话框无法打开,聊天记录也会随之删除,无法找回,
1.Bootstrap模态对话框和简单使用x对话框标题对话框主体取消确定可以使用按钮或链接直接调用模态对话框,这是简单的用法:打开对话框打开对话框2.使用rem
对话框的性质分为模态对话框和非模态对话框:1.模态对话框:打开该对话框之后,在该对话框之外的一切操作都是被禁止的,要想进行其他操作,必须先关闭本对话框。js命令