mirror of
https://gitee.com/handyorg/HandyControl.git
synced 2024-12-05 13:28:18 +08:00
commit
15bf905515
@ -41,6 +41,7 @@
|
|||||||
<hc:NotifyIcon Token="{x:Static data:MessageToken.NotifyIconDemo}" Text="HandyControl" IsBlink="{Binding ContextMenuIsBlink}" Visibility="{Binding ContextMenuIsShow,Converter={StaticResource Boolean2VisibilityConverter}}">
|
<hc:NotifyIcon Token="{x:Static data:MessageToken.NotifyIconDemo}" Text="HandyControl" IsBlink="{Binding ContextMenuIsBlink}" Visibility="{Binding ContextMenuIsShow,Converter={StaticResource Boolean2VisibilityConverter}}">
|
||||||
<hc:NotifyIcon.ContextMenu>
|
<hc:NotifyIcon.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
|
<MenuItem Command="{Binding SendNotificationCmd}" Header="{x:Static langs:Lang.SendNotification}"/>
|
||||||
<MenuItem Command="hc:ControlCommands.PushMainWindow2Top" Header="{x:Static langs:Lang.OpenPanel}"/>
|
<MenuItem Command="hc:ControlCommands.PushMainWindow2Top" Header="{x:Static langs:Lang.OpenPanel}"/>
|
||||||
<MenuItem Command="hc:ControlCommands.ShutdownApp" Header="{x:Static langs:Lang.Exit}"/>
|
<MenuItem Command="hc:ControlCommands.ShutdownApp" Header="{x:Static langs:Lang.Exit}"/>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
|
@ -6,6 +6,7 @@ using System.Runtime.InteropServices;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Controls.Primitives;
|
using System.Windows.Controls.Primitives;
|
||||||
|
using System.Windows.Data;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
@ -62,11 +63,13 @@ namespace HandyControl.Controls
|
|||||||
static NotifyIcon()
|
static NotifyIcon()
|
||||||
{
|
{
|
||||||
VisibilityProperty.OverrideMetadata(typeof(NotifyIcon), new PropertyMetadata(Visibility.Visible, OnVisibilityChanged));
|
VisibilityProperty.OverrideMetadata(typeof(NotifyIcon), new PropertyMetadata(Visibility.Visible, OnVisibilityChanged));
|
||||||
|
DataContextProperty.OverrideMetadata(typeof(NotifyIcon), new FrameworkPropertyMetadata(DataContextPropertyChanged));
|
||||||
|
ContextMenuProperty.OverrideMetadata(typeof(NotifyIcon), new FrameworkPropertyMetadata(ContextMenuPropertyChanged));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OnVisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
private static void OnVisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
var ctl = (NotifyIcon) d;
|
var ctl = (NotifyIcon)d;
|
||||||
var v = (Visibility)e.NewValue;
|
var v = (Visibility)e.NewValue;
|
||||||
|
|
||||||
if (v == Visibility.Visible)
|
if (v == Visibility.Visible)
|
||||||
@ -77,12 +80,30 @@ namespace HandyControl.Controls
|
|||||||
}
|
}
|
||||||
ctl.UpdateIcon(true);
|
ctl.UpdateIcon(true);
|
||||||
}
|
}
|
||||||
else if(ctl._iconCurrentHandle != IntPtr.Zero)
|
else if (ctl._iconCurrentHandle != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
ctl.UpdateIcon(false);
|
ctl.UpdateIcon(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void DataContextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) =>
|
||||||
|
((NotifyIcon) d).OnDataContextPropertyChanged(e);
|
||||||
|
|
||||||
|
private void OnDataContextPropertyChanged(DependencyPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
UpdateDataContext(_contextContent, e.OldValue, e.NewValue);
|
||||||
|
UpdateDataContext(ContextMenu, e.OldValue, e.NewValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ContextMenuPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var ctl = (NotifyIcon)d;
|
||||||
|
ctl.OnContextMenuPropertyChanged(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnContextMenuPropertyChanged(DependencyPropertyChangedEventArgs e) =>
|
||||||
|
UpdateDataContext((ContextMenu) e.NewValue, null, DataContext);
|
||||||
|
|
||||||
public NotifyIcon()
|
public NotifyIcon()
|
||||||
{
|
{
|
||||||
_id = ++NextId;
|
_id = ++NextId;
|
||||||
@ -228,7 +249,7 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
public string Token
|
public string Token
|
||||||
{
|
{
|
||||||
get => (string) GetValue(TokenProperty);
|
get => (string)GetValue(TokenProperty);
|
||||||
set => SetValue(TokenProperty, value);
|
set => SetValue(TokenProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +258,7 @@ namespace HandyControl.Controls
|
|||||||
|
|
||||||
public string Text
|
public string Text
|
||||||
{
|
{
|
||||||
get => (string) GetValue(TextProperty);
|
get => (string)GetValue(TextProperty);
|
||||||
set => SetValue(TextProperty, value);
|
set => SetValue(TextProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,13 +295,13 @@ namespace HandyControl.Controls
|
|||||||
var ctl = (NotifyIcon)d;
|
var ctl = (NotifyIcon)d;
|
||||||
if (ctl._dispatcherTimerBlink != null)
|
if (ctl._dispatcherTimerBlink != null)
|
||||||
{
|
{
|
||||||
ctl._dispatcherTimerBlink.Interval = (TimeSpan) e.NewValue;
|
ctl._dispatcherTimerBlink.Interval = (TimeSpan)e.NewValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimeSpan BlinkInterval
|
public TimeSpan BlinkInterval
|
||||||
{
|
{
|
||||||
get => (TimeSpan) GetValue(BlinkIntervalProperty);
|
get => (TimeSpan)GetValue(BlinkIntervalProperty);
|
||||||
set => SetValue(BlinkIntervalProperty, value);
|
set => SetValue(BlinkIntervalProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +312,7 @@ namespace HandyControl.Controls
|
|||||||
{
|
{
|
||||||
var ctl = (NotifyIcon)d;
|
var ctl = (NotifyIcon)d;
|
||||||
if (ctl.Visibility != Visibility.Visible) return;
|
if (ctl.Visibility != Visibility.Visible) return;
|
||||||
if ((bool) e.NewValue)
|
if ((bool)e.NewValue)
|
||||||
{
|
{
|
||||||
if (ctl._dispatcherTimerBlink == null)
|
if (ctl._dispatcherTimerBlink == null)
|
||||||
{
|
{
|
||||||
@ -676,6 +697,15 @@ namespace HandyControl.Controls
|
|||||||
remove => RemoveHandler(MouseDoubleClickEvent, value);
|
remove => RemoveHandler(MouseDoubleClickEvent, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateDataContext(FrameworkElement target, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
if (target == null || BindingOperations.GetBindingExpression(target, DataContextProperty) != null) return;
|
||||||
|
if (ReferenceEquals(this, target.DataContext) || Equals(oldValue, target.DataContext))
|
||||||
|
{
|
||||||
|
target.DataContext = newValue ?? this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Dispose(bool disposing)
|
private void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (_isDisposed) return;
|
if (_isDisposed) return;
|
||||||
|
Loading…
Reference in New Issue
Block a user