add:自定义浮动栏图标

This commit is contained in:
2025-07-15 20:30:10 +08:00
parent 2c2f46a0d8
commit e687c78ba8
9 changed files with 374 additions and 44 deletions
@@ -0,0 +1,44 @@
<Window x:Class="Ink_Canvas.AddCustomIconWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:local="clr-namespace:Ink_Canvas"
mc:Ignorable="d"
Title="添加自定义图标" Height="500" Width="750" WindowStartupLocation="CenterScreen" ResizeMode="NoResize">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="添加自定义浮动栏图标" FontSize="18" FontWeight="Bold" Margin="0,0,0,15" Grid.Row="0"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,0,0,20">
<TextBlock Text="选择图标文件:" VerticalAlignment="Center" FontSize="14"/>
<TextBox Name="IconPathTextBox" Width="220" IsReadOnly="True" Margin="10,0" Height="25"/>
<Button Content="浏览..." Click="BrowseButton_Click" Width="80" Height="45"/>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,0,0,20">
<TextBlock Text="图标名称:" VerticalAlignment="Center" FontSize="14"/>
<TextBox Name="IconNameTextBox" Width="280" Margin="28,0,0,0" Height="25"/>
</StackPanel>
<TextBlock Grid.Row="3" Text="预览:" Margin="0,0,0,8" FontSize="14"/>
<Border Grid.Row="4" BorderBrush="#CCCCCC" BorderThickness="1" Padding="8" HorizontalAlignment="Left" VerticalAlignment="Top">
<Image Name="IconPreviewImage" Width="72" Height="72" Stretch="Uniform"/>
</Border>
<StackPanel Grid.Row="5" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,25,0,0">
<Button Content="取消" Width="100" Height="30" Click="CancelButton_Click" Margin="0,0,15,0"/>
<Button Name="SaveButton" Content="保存" Width="100" Height="30" Click="SaveButton_Click" IsEnabled="False"/>
</StackPanel>
</Grid>
</Window>
@@ -0,0 +1,113 @@
using System;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
using Microsoft.Win32;
namespace Ink_Canvas
{
/// <summary>
/// AddCustomIconWindow.xaml 的交互逻辑
/// </summary>
public partial class AddCustomIconWindow : Window
{
private MainWindow mainWindow;
private string selectedFilePath;
public bool IsSuccess { get; private set; }
public AddCustomIconWindow(MainWindow owner)
{
InitializeComponent();
mainWindow = owner;
IsSuccess = false;
// 添加TextBox内容变化事件以检查是否可以保存
IconNameTextBox.TextChanged += (s, e) => ValidateSaveButton();
}
private void BrowseButton_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Filter = "图像文件|*.png;*.jpg;*.jpeg;*.bmp;*.gif;*.ico",
Title = "选择一个图标文件"
};
if (openFileDialog.ShowDialog() == true)
{
selectedFilePath = openFileDialog.FileName;
IconPathTextBox.Text = selectedFilePath;
// 显示预览
try
{
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new Uri(selectedFilePath);
bitmap.EndInit();
IconPreviewImage.Source = bitmap;
}
catch (Exception ex)
{
MessageBox.Show($"无法加载图像: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
// 自动填充名称建议(文件名,不包括扩展名)
string suggestedName = Path.GetFileNameWithoutExtension(selectedFilePath);
IconNameTextBox.Text = suggestedName;
ValidateSaveButton();
}
}
private void ValidateSaveButton()
{
SaveButton.IsEnabled = !string.IsNullOrWhiteSpace(IconNameTextBox.Text) && !string.IsNullOrEmpty(selectedFilePath);
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
try
{
// 创建pictures文件夹(如果不存在)
string picturesFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pictures");
if (!Directory.Exists(picturesFolder))
{
Directory.CreateDirectory(picturesFolder);
}
// 生成一个唯一的文件名(使用GUID)
string extension = Path.GetExtension(selectedFilePath);
string newFileName = $"{Guid.NewGuid()}{extension}";
string destPath = Path.Combine(picturesFolder, newFileName);
// 复制文件到pictures文件夹
File.Copy(selectedFilePath, destPath);
// 创建新的自定义图标对象
var customIcon = new CustomFloatingBarIcon(IconNameTextBox.Text, destPath);
// 添加到主窗口的设置中
MainWindow.Settings.Appearance.CustomFloatingBarImgs.Add(customIcon);
// 更新ComboBox
mainWindow.UpdateCustomIconsInComboBox();
// 保存设置
MainWindow.SaveSettingsToFile();
IsSuccess = true;
this.Close();
}
catch (Exception ex)
{
MessageBox.Show($"保存图标时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
+45
View File
@@ -0,0 +1,45 @@
<Window x:Class="Ink_Canvas.CustomIconWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:local="clr-namespace:Ink_Canvas"
mc:Ignorable="d"
Title="自定义浮动栏图标" Height="450" Width="500" WindowStartupLocation="CenterScreen">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="自定义浮动栏图标管理" FontSize="20" FontWeight="Bold" Margin="0,0,0,15"/>
<ListView Grid.Row="1" Name="CustomIconsListView" BorderBrush="#CCCCCC" BorderThickness="1">
<ListView.View>
<GridView>
<GridViewColumn Header="预览" Width="80">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding FilePath}" Width="32" Height="32"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="名称" Width="200" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="操作" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="删除" Click="DeleteCustomIcon_Click" Tag="{Binding}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,15,0,0">
<Button Content="关闭" Width="80" Click="CloseButton_Click"/>
</StackPanel>
</Grid>
</Window>
@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas
{
/// <summary>
/// CustomIconWindow.xaml 的交互逻辑
/// </summary>
public partial class CustomIconWindow : Window
{
private MainWindow mainWindow;
public ObservableCollection<CustomFloatingBarIcon> CustomIcons { get; set; }
public CustomIconWindow(MainWindow owner)
{
InitializeComponent();
mainWindow = owner;
// 从主窗口的设置获取自定义图标列表
CustomIcons = new ObservableCollection<CustomFloatingBarIcon>(MainWindow.Settings.Appearance.CustomFloatingBarImgs);
CustomIconsListView.ItemsSource = CustomIcons;
}
private void DeleteCustomIcon_Click(object sender, RoutedEventArgs e)
{
if (sender is Button button && button.Tag is CustomFloatingBarIcon icon)
{
// 从列表中移除图标
CustomIcons.Remove(icon);
// 更新主窗口的设置
MainWindow.Settings.Appearance.CustomFloatingBarImgs.Clear();
foreach (var customIcon in CustomIcons)
{
MainWindow.Settings.Appearance.CustomFloatingBarImgs.Add(customIcon);
}
// 如果当前选中的是被删除的图标,重置为默认图标
if (MainWindow.Settings.Appearance.FloatingBarImg >= 8 &&
MainWindow.Settings.Appearance.FloatingBarImg - 8 >= MainWindow.Settings.Appearance.CustomFloatingBarImgs.Count)
{
MainWindow.Settings.Appearance.FloatingBarImg = 0;
mainWindow.ComboBoxFloatingBarImg.SelectedIndex = 0;
mainWindow.UpdateFloatingBarIcon();
}
// 更新ComboBox
mainWindow.UpdateCustomIconsInComboBox();
// 保存设置
MainWindow.SaveSettingsToFile();
}
}
private void CloseButton_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}