WPF自定义控件之消息提示

打印 上一主题 下一主题

主题 914|帖子 914|积分 2742

创建消息提示控件

  1. internal class Message : ContentControl
  2.     {
  3.    
  4.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public int Time { get; set; }
  5.    
  6.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />[Bindable(true)]
  7.    
  8.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public MessageType MessageType { get { return (MessageType)GetValue(MessageTypeProperty); } set { SetValue(MessageTypeProperty, value); } }
  9.    
  10.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static readonly DependencyProperty MessageTypeProperty = DependencyProperty.Register("MessageType", typeof(MessageType), typeof(Message), new PropertyMetadata(default(MessageType)));
  11.    
  12.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />internal Message()
  13.    
  14.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
  15.    
  16.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    Loaded += Message_Loaded;
  17.    
  18.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
  19.    
  20.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />private async void Message_Loaded(object sender, System.Windows.RoutedEventArgs e)
  21.    
  22.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
  23.    
  24.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    if (Parent is MessageHost host)
  25.    
  26.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    {
  27.    
  28.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  29.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />await Task.Delay(Time);
  30.    
  31.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  32.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />host.Items.Remove(this);
  33.    
  34.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    }
  35.    
  36.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
  37.     }
复制代码
消息提示控件
  1.    
  2.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
复制代码
消息提示控件容器样式创建消息通知类

  1. public class MessageManage    {   
  2.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />internal static Dictionary MessageHosts { get; set; } = MessageHosts ?? new Dictionary();   
  3.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Default(string message, string token = null, int time = 3000)   
  4.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  5.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    Show(message, MessageType.Default, token, time);   
  6.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}   
  7.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Success(string message, string token = null, int time = 3000)   
  8.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  9.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    Show(message, MessageType.Success, token, time);   
  10.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}   
  11.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Warning(string message, string token = null, int time = 3000)   
  12.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  13.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    Show(message, MessageType.Warning, token, time);   
  14.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}   
  15.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Error(string message, string token = null, int time = 3000)   
  16.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  17.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    Show(message, MessageType.Error, token, time);   
  18.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}   
  19.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />private static void Show(string message, MessageType messageType, string token, double time)   
  20.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  21.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    if (!MessageHosts.ContainsKey(token)) return;   
  22.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    var messageHost = MessageHosts[token];   
  23.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    messageHost.Dispatcher.BeginInvoke( (Action)(() =>   
  24.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    {   
  25.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  26.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />messageHost.Items.Add(new Message() { MessageType = messageType, Content = message, Time = time, Uid = Guid.NewGuid().ToString() });   
  27.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    }));   
  28.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}    }
复制代码
消息通知使用示例:

在app.xaml中引入资源
  1.    
  2.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  3.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  4.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  5.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  6.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  7.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  8.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
复制代码
 MainWindow.xaml
  1.    
  2.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
  3.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />   
复制代码
  1. public partial class MainWindow : Window    {   
  2.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public MainWindow()   
  3.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  4.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    InitializeComponent();   
  5.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}   
  6.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />private void Button_Click(object sender, RoutedEventArgs e)   
  7.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{   
  8.     <Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />    MessageManage.Success("点击了测试", "MainmessageToken");
  9.      }
  10.    }
复制代码
效果:

 通俗点讲就是在想要拥有提示的页面添加一个容器,容器中塞入消息提示控件,消息提示控件在指定时间之后从容器中移除;
MessageManage类通过token进行查找到指定容器进行塞入;
也可以全局使用一个消息容器进行提示;根据需求进行改造。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表