增加托盘图标

This commit is contained in:
ww-rm
2025-09-22 20:09:46 +08:00
parent 0906817cd3
commit 3e88e65bbd
4 changed files with 50 additions and 10 deletions

View File

@@ -22,7 +22,9 @@
<Content Include="Resources\Images\skel.ico"> <Content Include="Resources\Images\skel.ico">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Resources\Images\spineviewer.ico" /> <Content Include="Resources\Images\spineviewer.ico">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -5,6 +5,7 @@ using SFMLRenderer;
using SpineViewer.Models; using SpineViewer.Models;
using SpineViewer.Services; using SpineViewer.Services;
using SpineViewer.Utils; using SpineViewer.Utils;
using System.Windows;
using System.Windows.Shell; using System.Windows.Shell;
namespace SpineViewer.ViewModels.MainWindow namespace SpineViewer.ViewModels.MainWindow
@@ -72,6 +73,8 @@ namespace SpineViewer.ViewModels.MainWindow
public SFMLRendererViewModel SFMLRendererViewModel => _sfmlRendererViewModel; public SFMLRendererViewModel SFMLRendererViewModel => _sfmlRendererViewModel;
private readonly SFMLRendererViewModel _sfmlRendererViewModel; private readonly SFMLRendererViewModel _sfmlRendererViewModel;
public RelayCommand Cmd_Exit => new(App.Current.Shutdown);
/// <summary> /// <summary>
/// 打开工作区 /// 打开工作区
/// </summary> /// </summary>

View File

@@ -480,7 +480,7 @@
<ColumnDefinition Width="Auto" SharedSizeGroup="ColAniTime"/> <ColumnDefinition Width="Auto" SharedSizeGroup="ColAniTime"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{Binding TrackIndex}" HorizontalContentAlignment="Left" VerticalAlignment="Top" Background="#bfffffff"/> <Label Grid.Column="0" Content="{Binding TrackIndex}" HorizontalContentAlignment="Left" VerticalAlignment="Top" Background="#bfffffff"/>
<Label Grid.Column="1" Content="{Binding AnimationDuration}" VerticalAlignment="Top" ContentStringFormat="{}{0:F3} s"/> <Label Grid.Column="1" Content="{Binding AnimationDuration}" VerticalAlignment="Top" ContentStringFormat="{}{0:F3} s"/>
@@ -922,6 +922,21 @@
Opened="BottomPopup_Opened" Opened="BottomPopup_Opened"
MouseLeave="PopupContainer_MouseLeave"/> MouseLeave="PopupContainer_MouseLeave"/>
</Grid> </Grid>
<!-- 非可视元素通知栏图标 -->
<hc:NotifyIcon x:Name="_notifyIcon"
Icon="/Resources/Images/spineviewer.ico"
Click="_notifyIcon_Click"
MouseDoubleClick="_notifyIcon_MouseDoubleClick">
<hc:NotifyIcon.ContextMenu>
<ContextMenu>
<MenuItem Header="There may be a funtion :)" IsChecked="True"/>
<Separator/>
<MenuItem Header="{DynamicResource Str_Exit}" Command="{Binding Cmd_Exit}"/>
</ContextMenu>
</hc:NotifyIcon.ContextMenu>
</hc:NotifyIcon>
</Grid> </Grid>
</Window> </Window>

View File

@@ -44,8 +44,9 @@ public partial class MainWindow : Window
{ {
InitializeComponent(); InitializeComponent();
InitializeLogConfiguration(); InitializeLogConfiguration();
_vm = new (_renderPanel); DataContext = _vm = new(_renderPanel);
DataContext = _vm; _notifyIcon.Text = _vm.Title; // XXX: hc 的 NotifyIcon 的 Text 似乎没法双向绑定
_vm.SpineObjectListViewModel.RequestSelectionChanging += SpinesListView_RequestSelectionChanging; _vm.SpineObjectListViewModel.RequestSelectionChanging += SpinesListView_RequestSelectionChanging;
_vm.SFMLRendererViewModel.RequestSelectionChanging += SpinesListView_RequestSelectionChanging; _vm.SFMLRendererViewModel.RequestSelectionChanging += SpinesListView_RequestSelectionChanging;
Loaded += MainWindow_Loaded; Loaded += MainWindow_Loaded;
@@ -313,6 +314,31 @@ public partial class MainWindow : Window
#endregion #endregion
#region _spineFilesListBox
private void SpineFilesListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var list = (ListBox)sender;
if (VisualUpwardSearch<ListBoxItem>(e.OriginalSource as DependencyObject) is null)
list.SelectedItems.Clear();
}
#endregion
#region _nofityIcon
private void _notifyIcon_Click(object sender, RoutedEventArgs e)
{
}
private void _notifyIcon_MouseDoubleClick(object sender, RoutedEventArgs e)
{
}
#endregion
#region #region
private void SwitchToFullScreenLayout() private void SwitchToFullScreenLayout()
@@ -571,10 +597,4 @@ public partial class MainWindow : Window
#endregion #endregion
private void SpineFilesListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var list = (ListBox)sender;
if (VisualUpwardSearch<ListBoxItem>(e.OriginalSource as DependencyObject) is null)
list.SelectedItems.Clear();
}
} }