ToB企服应用市场:ToB评测及商务社交产业平台
标题:
WPF自定义控件之消息提示
[打印本页]
作者:
tsx81428
时间:
2022-11-21 01:20
标题:
WPF自定义控件之消息提示
创建消息提示控件
internal class Message : ContentControl
{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public int Time { get; set; }
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />[Bindable(true)]
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public MessageType MessageType { get { return (MessageType)GetValue(MessageTypeProperty); } set { SetValue(MessageTypeProperty, value); } }
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static readonly DependencyProperty MessageTypeProperty = DependencyProperty.Register("MessageType", typeof(MessageType), typeof(Message), new PropertyMetadata(default(MessageType)));
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />internal Message()
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> Loaded += Message_Loaded;
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />private async void Message_Loaded(object sender, System.Windows.RoutedEventArgs e)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> if (Parent is MessageHost host)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> {
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />await Task.Delay(Time);
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />host.Items.Remove(this);
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> }
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
}
复制代码
消息提示控件
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
复制代码
消息提示控件容器样式
创建消息通知类
public class MessageManage {
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />internal static Dictionary MessageHosts { get; set; } = MessageHosts ?? new Dictionary();
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Default(string message, string token = null, int time = 3000)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> Show(message, MessageType.Default, token, time);
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Success(string message, string token = null, int time = 3000)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> Show(message, MessageType.Success, token, time);
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Warning(string message, string token = null, int time = 3000)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> Show(message, MessageType.Warning, token, time);
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public static void Error(string message, string token = null, int time = 3000)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> Show(message, MessageType.Error, token, time);
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />private static void Show(string message, MessageType messageType, string token, double time)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> if (!MessageHosts.ContainsKey(token)) return;
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> var messageHost = MessageHosts[token];
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> messageHost.Dispatcher.BeginInvoke( (Action)(() =>
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> {
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />messageHost.Items.Add(new Message() { MessageType = messageType, Content = message, Time = time, Uid = Guid.NewGuid().ToString() });
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> }));
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />} }
复制代码
消息通知
使用示例:
在app.xaml中引入资源
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
复制代码
MainWindow.xaml
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />
复制代码
public partial class MainWindow : Window {
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />public MainWindow()
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> InitializeComponent();
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />}
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />private void Button_Click(object sender, RoutedEventArgs e)
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" />{
<Style BasedOn="{StaticResource MessageHostStyle}" TargetType="xy:MessageHost" /> MessageManage.Success("点击了测试", "MainmessageToken");
}
}
复制代码
效果:
通俗点讲就是在想要拥有提示的页面添加一个容器,容器中塞入消息提示控件,消息提示控件在指定时间之后从容器中移除;
MessageManage类通过token进行查找到指定容器进行塞入;
也可以全局使用一个消息容器进行提示;根据需求进行改造。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4