翼度科技»论坛 编程开发 .net 查看内容

3.Popup 消息弹出框

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
 Popup 是一个用于显示临时性内容的控件,它可以在应用程序的其他内容之上显示一个弹出窗口。它通常用于实现下拉菜单、工具提示、通知消息等功能。
主要属性为:
Child:获取或设置 Popup控件的内容。
IsOpen:获取或设置一个值,该值指示Popup 是否可见
Placement:获取或设置 Popup 控件打开时的控件方向,并指定Popup 控件在与屏幕边界重叠时的控件行为
PlacementTarget:获取或设置当打开 Popup 控件时该控件相对于其放置的元素。
PopupAnimation:获取或设置Popup 控件的打开和关闭动画。
StaysOpen:获取或设置一个值,该值指示当 Popup 控件焦点不再对准时,是否关闭该控件。
 
案例:
PopupBox.xaml
  1. <<strong>Popup</strong> x:Class="WPF.Common.Dialog.PopupBox"
  2.              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6.              xmlns:local="clr-namespace:WPF.Common.Dialog"
  7.              mc:Ignorable="d"
  8.              d:DesignHeight="450" d:DesignWidth="800">
  9.     <Grid>
  10.         <Border x:Name="border" Background="Gray" CornerRadius="8" MinHeight="35" Width="400" Height="100">
  11.             <TextBlock TextWrapping="WrapWithOverflow"
  12.                        Foreground="White"
  13.                        Margin="10"
  14.                        FontSize="18"
  15.                        HorizontalAlignment="Center"
  16.                        VerticalAlignment="Center"
  17.                        Text="{Binding Path=Message,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:PopupBox},UpdateSourceTrigger=PropertyChanged}"/>
  18.         </Border>
  19.     </Grid>
  20. </Popup>
复制代码
PopupBox.xaml.cs
  1. /// <summary>
  2.     /// PopupBox.xaml 的交互逻辑
  3.     /// </summary>
  4.     public partial class PopupBox : <strong>Popup</strong>
  5.     {
  6.         private static PopupBox dialog = new PopupBox();
  7.         private static DispatcherTimer timer = new DispatcherTimer();
  8.         public PopupBox()
  9.         {
  10.             InitializeComponent();
  11.         }
  12.         /// <summary>
  13.         /// 弹出对话框
  14.         /// </summary>
  15.         /// <param name="message">消息</param>
  16.         /// <param name="owner">所属窗体对象</param>
  17.         /// <param name="seconds">对话框隐藏倒计时(秒)</param>
  18.         public static void Show(string message, Window owner = null, int seconds = 1)
  19.         {
  20.             try
  21.             {
  22.                 Application.Current.Dispatcher.Invoke(new Action(() =>
  23.                 {
  24.                     if (owner == null)
  25.                     {
  26.                         owner = Application.Current.MainWindow;
  27.                     }
  28.                     dialog.Message = message;
  29.                     dialog.PlacementTarget = owner;
  30.                     dialog.Placement = PlacementMode.Center;
  31.                     dialog.StaysOpen = true;
  32.                     dialog.AllowsTransparency = true;
  33.                     dialog.VerticalOffset = owner.ActualHeight / 3;
  34.                     dialog.Opacity = 0.9;
  35.                     dialog.IsOpen = true;
  36.                     timer.Tick -= Timer_Tick;
  37.                     timer.Tick += Timer_Tick;
  38.                     timer.Interval = new TimeSpan(0, 0, seconds);
  39.                     timer.Start();
  40.                 }));
  41.             }
  42.             catch
  43.             {
  44.             }
  45.         }
  46.         private static void Timer_Tick(object sender, EventArgs e)
  47.         {
  48.             timer.Stop();
  49.             Task.Run(() =>
  50.             {
  51.                 try
  52.                 {
  53.                     for (int i = 0; i < 100; i++)
  54.                     {
  55.                         Thread.Sleep(5);
  56.                         if (Application.Current == null) return;
  57.                         Application.Current.Dispatcher.Invoke(() =>
  58.                         {
  59.                             dialog.Opacity -= 0.01;
  60.                         });
  61.                     }
  62.                     Application.Current.Dispatcher.Invoke(() =>
  63.                     {
  64.                         dialog.IsOpen = false;
  65.                         dialog.Message = string.Empty;
  66.                     });
  67.                 }
  68.                 catch
  69.                 {
  70.                 }
  71.             });
  72.         }
  73.         /// <summary>
  74.         /// 依赖属性--透明度
  75.         /// </summary>
  76.         public new double Opacity
  77.         {
  78.             get { return (double)GetValue(OpacityProperty); }
  79.             set { SetValue(OpacityProperty, value); }
  80.         }
  81.         public static new readonly DependencyProperty OpacityProperty =
  82.             DependencyProperty.Register("Opacity", typeof(double), typeof(PopupBox), new PropertyMetadata(1.0, new PropertyChangedCallback(OnOpacityPropertyChangedCallback)));
  83.         private static void OnOpacityPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
  84.         {
  85.             if (!(d is PopupBox box)) return;
  86.             if (!(e.NewValue is double v)) return;
  87.             box.border.Opacity = v;//赋值新的透明度
  88.         }
  89.         /// <summary>
  90.         /// 依赖属性--消息
  91.         /// </summary>
  92.         public string Message
  93.         {
  94.             get { return (string)GetValue(MessageProperty); }
  95.             set { SetValue(MessageProperty, value); }
  96.         }
  97.         public static readonly DependencyProperty MessageProperty =
  98.             DependencyProperty.Register("Message", typeof(string), typeof(PopupBox), new PropertyMetadata(string.Empty));
  99.     }
复制代码
 

来源:https://www.cnblogs.com/MingQiu/p/18005673
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具