示例#1
0
        protected virtual ToastMessageControl GetToastControl(Form form, object content)
        {
            string msg     = content == null ? "(null)" : content.ToString();
            var    control = new ToastMessageControl(msg, Background, Foreground, Glow)
            {
                IsTransparent = true
            };
            Font font = Font;

            if (font == null)
            {
                font = form.Font;
            }
            else
            {
                control.Font = font;
            }
            using (Graphics gr = control.CreateGraphics())
            {
                SizeF textSize = gr.MeasureString(msg, font);
                control.Height = (int)textSize.Height + 25;
                control.Width  = (int)textSize.Width + 35;
                if (textSize.Width > form.Width - 100)
                {
                    control.Width = form.Width - 100;
                    var hf = textSize.Width / control.Width;
                    control.Height += (int)(textSize.Height * hf);
                }
                if (control.Height > form.Height)
                {
                    control.Height = form.Height;
                }
            }
            return(control);
        }
示例#2
0
 private static void ClearControl(ToastMessageControl control)
 {
     control.TaskCompletionSource.TrySetResult(null);
     control.Parent?.Controls.Remove(control);
     ((Timer)control.Tag).Dispose();
     control.Dispose();
 }
示例#3
0
            public void Close()
            {
                var control = Control;

                if (control == null)
                {
                    return;
                }
                Control = null;
                ServiceProvider.ThreadManager.Invoke(ExecutionMode.AsynchronousOnUiThread, control, control, (messageControl, toastMessageControl) => ClearControl(messageControl));
            }
示例#4
0
        protected virtual ToastMessageControl ShowInternal(object content, float duration, ToastPosition position, IDataContext context, TaskCompletionSource <object> tcs)
        {
            Form activeForm = Form.ActiveForm;

            if (activeForm == null)
            {
                tcs.SetResult(null);
                return(null);
            }
            foreach (var result in activeForm.Controls.Find(ControlName, false).OfType <ToastMessageControl>())
            {
                ClearControl(result);
            }

            ToastMessageControl control = null;
            var selector = activeForm.GetBindingMemberValue(AttachedMembers.Form.ToastTemplateSelector);

            if (selector != null)
            {
                control = (ToastMessageControl)selector.SelectTemplate(content, activeForm);
            }

            if (control == null)
            {
                control = GetToastControl(activeForm, content);
            }
            control.Duration             = duration;
            control.TaskCompletionSource = tcs;
            control.Name = ControlName;
            activeForm.Controls.Add(control);
            SetPosition(activeForm, control, position);
            control.BringToFront();
            var timer = new Timer {
                Interval = TimerInterval, Tag = control
            };

            timer.Tick += TimerTick;
            timer.Start();
            control.Tag = timer;
            return(control);
        }