@@ -483,18 +483,12 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
if (isRegistered)
|
||||
{
|
||||
FileAssociationStatusText.Text = "✓ .icstk文件关联已注册";
|
||||
// 使用主题适配的绿色
|
||||
FileAssociationStatusText.Foreground = ThemeHelper.IsDarkTheme
|
||||
? new SolidColorBrush(Color.FromRgb(76, 175, 80)) // 深色主题下的绿色
|
||||
: new SolidColorBrush(Color.FromRgb(46, 125, 50)); // 浅色主题下的绿色
|
||||
FileAssociationStatusText.Foreground = new SolidColorBrush(Colors.LightGreen);
|
||||
}
|
||||
else
|
||||
{
|
||||
FileAssociationStatusText.Text = "✗ .icstk文件关联未注册";
|
||||
// 使用主题适配的红色
|
||||
FileAssociationStatusText.Foreground = ThemeHelper.IsDarkTheme
|
||||
? new SolidColorBrush(Color.FromRgb(244, 67, 54)) // 深色主题下的红色
|
||||
: new SolidColorBrush(Color.FromRgb(198, 40, 40)); // 浅色主题下的红色
|
||||
FileAssociationStatusText.Foreground = new SolidColorBrush(Colors.LightCoral);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -504,10 +498,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
FileAssociationStatusText.Visibility = Visibility.Visible;
|
||||
FileAssociationStatusText.Text = $"✗ 检查文件关联状态时出错: {ex.Message}";
|
||||
// 使用主题适配的红色
|
||||
FileAssociationStatusText.Foreground = ThemeHelper.IsDarkTheme
|
||||
? new SolidColorBrush(Color.FromRgb(244, 67, 54)) // 深色主题下的红色
|
||||
: new SolidColorBrush(Color.FromRgb(198, 40, 40)); // 浅色主题下的红色
|
||||
FileAssociationStatusText.Foreground = new SolidColorBrush(Colors.LightCoral);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -521,26 +512,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
SetOptionButtonState("AutoBackupInterval", MainWindow.Settings.Advanced.AutoBackupIntervalDays);
|
||||
}
|
||||
|
||||
// 如果文件关联状态文本已显示,更新其颜色以适配主题
|
||||
if (FileAssociationStatusText != null && FileAssociationStatusText.Visibility == Visibility.Visible)
|
||||
{
|
||||
var currentText = FileAssociationStatusText.Text;
|
||||
if (currentText.Contains("✓") || currentText.Contains("已注册"))
|
||||
{
|
||||
// 成功状态 - 绿色
|
||||
FileAssociationStatusText.Foreground = ThemeHelper.IsDarkTheme
|
||||
? new SolidColorBrush(Color.FromRgb(76, 175, 80))
|
||||
: new SolidColorBrush(Color.FromRgb(46, 125, 50));
|
||||
}
|
||||
else if (currentText.Contains("✗") || currentText.Contains("未注册") || currentText.Contains("出错"))
|
||||
{
|
||||
// 错误状态 - 红色
|
||||
FileAssociationStatusText.Foreground = ThemeHelper.IsDarkTheme
|
||||
? new SolidColorBrush(Color.FromRgb(244, 67, 54))
|
||||
: new SolidColorBrush(Color.FromRgb(198, 40, 40));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -4,7 +4,6 @@ using System;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using Application = System.Windows.Application;
|
||||
|
||||
@@ -414,7 +413,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
private void AutoSaveIntervalButton_Click(object sender, MouseButtonEventArgs e)
|
||||
private void AutoSaveIntervalButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
</StackPanel>
|
||||
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,15,0">
|
||||
<Border x:Name="UpdateChannelReleaseBorder" Padding="13,7" CornerRadius="8" Cursor="Hand" Tag="UpdateChannel_Release" Margin="0,0,8,8" MouseLeftButtonDown="OptionButton_Click">
|
||||
<TextBlock Foreground="#2e3436" FontSize="14" Text="稳定版"/>
|
||||
<TextBlock Foreground="#2e3436" FontSize="14" FontWeight="Bold" Text="稳定版"/>
|
||||
</Border>
|
||||
<Border x:Name="UpdateChannelBetaBorder" Padding="13,7" CornerRadius="8" Cursor="Hand" Tag="UpdateChannel_Beta" Margin="0,0,8,8" MouseLeftButtonDown="OptionButton_Click">
|
||||
<TextBlock Foreground="#2e3436" FontSize="14" Text="测试版"/>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Ink_Canvas;
|
||||
using Ink_Canvas;
|
||||
using iNKORE.UI.WPF.Helpers;
|
||||
using System;
|
||||
using System.Linq;
|
||||
@@ -8,9 +8,6 @@ using System.Windows.Media;
|
||||
|
||||
namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
/// <summary>
|
||||
/// StartupPanel.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class StartupPanel : UserControl
|
||||
{
|
||||
private bool _isLoaded = false;
|
||||
@@ -24,21 +21,14 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
private void StartupPanel_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
LoadSettings();
|
||||
// 添加触摸支持
|
||||
EnableTouchSupport();
|
||||
// 应用主题
|
||||
ApplyTheme();
|
||||
_isLoaded = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为面板中的所有交互控件启用触摸支持
|
||||
/// </summary>
|
||||
private void EnableTouchSupport()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 延迟执行,确保所有控件都已加载
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
EnableTouchSupportForControls(this);
|
||||
@@ -46,16 +36,11 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"StartupPanel 启用触摸支持时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"StartupPanel 启用触摸支持时出�? {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为控件树中的所有交互控件启用触摸支持
|
||||
/// </summary>
|
||||
private void EnableTouchSupportForControls(System.Windows.DependencyObject parent)
|
||||
{
|
||||
// 使用 MainWindowSettingsHelper 的通用方法
|
||||
MainWindowSettingsHelper.EnableTouchSupportForControls(parent);
|
||||
}
|
||||
|
||||
@@ -74,10 +59,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
IsTopBarNeedNoShadowEffect?.Invoke(this, new RoutedEventArgs());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载设置到UI
|
||||
/// </summary>
|
||||
public void LoadSettings()
|
||||
{
|
||||
if (MainWindow.Settings == null) return;
|
||||
@@ -86,15 +67,12 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
|
||||
try
|
||||
{
|
||||
// 自动更新设置
|
||||
var toggleSwitchIsAutoUpdate = FindToggleSwitch("ToggleSwitchIsAutoUpdate");
|
||||
if (toggleSwitchIsAutoUpdate != null)
|
||||
{
|
||||
bool isAutoUpdate = MainWindow.Settings.Startup.IsAutoUpdate;
|
||||
SetToggleSwitchState(toggleSwitchIsAutoUpdate, isAutoUpdate);
|
||||
}
|
||||
|
||||
// 静默更新设置
|
||||
var toggleSwitchIsAutoUpdateWithSilence = FindToggleSwitch("ToggleSwitchIsAutoUpdateWithSilence");
|
||||
if (toggleSwitchIsAutoUpdateWithSilence != null)
|
||||
{
|
||||
@@ -102,17 +80,11 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
SetToggleSwitchState(toggleSwitchIsAutoUpdateWithSilence, isAutoUpdateWithSilence);
|
||||
toggleSwitchIsAutoUpdateWithSilence.Visibility = MainWindow.Settings.Startup.IsAutoUpdate ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
// 静默更新时间段
|
||||
if (AutoUpdateTimePeriodBlock != null)
|
||||
{
|
||||
AutoUpdateTimePeriodBlock.Visibility =
|
||||
(MainWindow.Settings.Startup.IsAutoUpdateWithSilence && MainWindow.Settings.Startup.IsAutoUpdate) ?
|
||||
Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
// 设置时间选择器
|
||||
if (AutoUpdateWithSilenceStartTimeComboBox != null)
|
||||
{
|
||||
var startTime = MainWindow.Settings.Startup.AutoUpdateWithSilenceStartTime ?? "06:00";
|
||||
var startItem = AutoUpdateWithSilenceStartTimeComboBox.Items.Cast<ComboBoxItem>()
|
||||
@@ -133,53 +105,38 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
AutoUpdateWithSilenceEndTimeComboBox.SelectedItem = endItem;
|
||||
}
|
||||
}
|
||||
|
||||
// 开机时运行
|
||||
var toggleSwitchRunAtStartup = FindToggleSwitch("ToggleSwitchRunAtStartup");
|
||||
if (toggleSwitchRunAtStartup != null)
|
||||
{
|
||||
// 检查启动项是否存在
|
||||
bool runAtStartup = System.IO.File.Exists(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\Ink Canvas Annotation.lnk");
|
||||
SetToggleSwitchState(toggleSwitchRunAtStartup, runAtStartup);
|
||||
}
|
||||
|
||||
// 启动时折叠
|
||||
var toggleSwitchFoldAtStartup = FindToggleSwitch("ToggleSwitchFoldAtStartup");
|
||||
if (toggleSwitchFoldAtStartup != null)
|
||||
{
|
||||
SetToggleSwitchState(toggleSwitchFoldAtStartup, MainWindow.Settings.Startup.IsFoldAtStartup);
|
||||
}
|
||||
|
||||
// 窗口无焦点模式
|
||||
var toggleSwitchNoFocusMode = FindToggleSwitch("ToggleSwitchNoFocusMode");
|
||||
if (toggleSwitchNoFocusMode != null && MainWindow.Settings.Advanced != null)
|
||||
{
|
||||
SetToggleSwitchState(toggleSwitchNoFocusMode, MainWindow.Settings.Advanced.IsNoFocusMode);
|
||||
}
|
||||
|
||||
// 窗口无边框模式
|
||||
var toggleSwitchWindowMode = FindToggleSwitch("ToggleSwitchWindowMode");
|
||||
if (toggleSwitchWindowMode != null && MainWindow.Settings.Advanced != null)
|
||||
{
|
||||
SetToggleSwitchState(toggleSwitchWindowMode, MainWindow.Settings.Advanced.WindowMode);
|
||||
}
|
||||
|
||||
// 窗口置顶
|
||||
var toggleSwitchAlwaysOnTop = FindToggleSwitch("ToggleSwitchAlwaysOnTop");
|
||||
if (toggleSwitchAlwaysOnTop != null && MainWindow.Settings.Advanced != null)
|
||||
{
|
||||
SetToggleSwitchState(toggleSwitchAlwaysOnTop, MainWindow.Settings.Advanced.IsAlwaysOnTop);
|
||||
}
|
||||
|
||||
// UIA置顶
|
||||
var toggleSwitchUIAccessTopMost = FindToggleSwitch("ToggleSwitchUIAccessTopMost");
|
||||
if (toggleSwitchUIAccessTopMost != null && MainWindow.Settings.Advanced != null)
|
||||
{
|
||||
SetToggleSwitchState(toggleSwitchUIAccessTopMost, MainWindow.Settings.Advanced.EnableUIAccessTopMost);
|
||||
}
|
||||
|
||||
// 更新通道
|
||||
if (MainWindow.Settings.Startup.UpdateChannel == UpdateChannel.Release)
|
||||
{
|
||||
UpdateUpdateChannelButtons(true);
|
||||
@@ -188,8 +145,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
UpdateUpdateChannelButtons(false);
|
||||
}
|
||||
|
||||
// 仅PPT模式
|
||||
var toggleSwitchMode = FindToggleSwitch("ToggleSwitchMode");
|
||||
if (toggleSwitchMode != null && MainWindow.Settings.ModeSettings != null)
|
||||
{
|
||||
@@ -198,37 +153,27 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"加载启动设置时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"加载启动设置时出�? {ex.Message}");
|
||||
}
|
||||
|
||||
_isLoaded = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找ToggleSwitch控件
|
||||
/// </summary>
|
||||
private Border FindToggleSwitch(string name)
|
||||
{
|
||||
return this.FindDescendantByName(name) as Border;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置ToggleSwitch状态
|
||||
/// </summary>
|
||||
private void SetToggleSwitchState(Border toggleSwitch, bool isOn)
|
||||
{
|
||||
if (toggleSwitch == null) return;
|
||||
toggleSwitch.Background = isOn ? new SolidColorBrush(Color.FromRgb(53, 132, 228)) : new SolidColorBrush(Color.FromRgb(225, 225, 225));
|
||||
toggleSwitch.Background = isOn
|
||||
? ThemeHelper.GetToggleSwitchOnBackgroundBrush()
|
||||
: ThemeHelper.GetToggleSwitchOffBackgroundBrush();
|
||||
var innerBorder = toggleSwitch.Child as Border;
|
||||
if (innerBorder != null)
|
||||
{
|
||||
innerBorder.HorizontalAlignment = isOn ? HorizontalAlignment.Right : HorizontalAlignment.Left;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ToggleSwitch点击事件处理
|
||||
/// </summary>
|
||||
private void ToggleSwitch_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
@@ -236,7 +181,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
var border = sender as Border;
|
||||
if (border == null) return;
|
||||
|
||||
bool isOn = border.Background.ToString() == "#FF3584E4";
|
||||
bool isOn = ThemeHelper.IsToggleSwitchOn(border.Background);
|
||||
bool newState = !isOn;
|
||||
SetToggleSwitchState(border, newState);
|
||||
|
||||
@@ -246,9 +191,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
switch (tag)
|
||||
{
|
||||
case "IsAutoUpdate":
|
||||
// 直接调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchIsAutoUpdate", newState);
|
||||
// 更新UI状态
|
||||
var toggleSwitchIsAutoUpdateWithSilence = FindToggleSwitch("ToggleSwitchIsAutoUpdateWithSilence");
|
||||
if (toggleSwitchIsAutoUpdateWithSilence != null)
|
||||
{
|
||||
@@ -263,45 +206,32 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
break;
|
||||
|
||||
case "IsAutoUpdateWithSilence":
|
||||
// 直接调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchIsAutoUpdateWithSilence", newState);
|
||||
// 更新UI状态
|
||||
if (AutoUpdateTimePeriodBlock != null)
|
||||
{
|
||||
AutoUpdateTimePeriodBlock.Visibility = newState ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
break;
|
||||
|
||||
case "RunAtStartup":
|
||||
// 直接调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchRunAtStartup", newState);
|
||||
break;
|
||||
|
||||
case "FoldAtStartup":
|
||||
// 直接调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchFoldAtStartup", newState);
|
||||
break;
|
||||
|
||||
case "NoFocusMode":
|
||||
// 窗口无焦点模式
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
if (MainWindow.Settings.Advanced != null)
|
||||
{
|
||||
if (MainWindow.Settings.Advanced != null)
|
||||
{
|
||||
MainWindow.Settings.Advanced.IsNoFocusMode = newState;
|
||||
}
|
||||
}, "ToggleSwitchNoFocusMode");
|
||||
// 调用 ApplyNoFocusMode 方法
|
||||
MainWindow.Settings.Advanced.IsNoFocusMode = newState;
|
||||
}
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("ApplyNoFocusMode");
|
||||
break;
|
||||
|
||||
case "WindowMode":
|
||||
// 窗口无边框模式
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchWindowMode", newState);
|
||||
break;
|
||||
|
||||
case "AlwaysOnTop":
|
||||
// 窗口置顶
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
if (MainWindow.Settings.Advanced != null)
|
||||
@@ -309,12 +239,10 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
MainWindow.Settings.Advanced.IsAlwaysOnTop = newState;
|
||||
}
|
||||
}, "ToggleSwitchAlwaysOnTop");
|
||||
// 调用 SetAlwaysOnTop 方法(如果存在)
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("SetAlwaysOnTop", newState);
|
||||
break;
|
||||
|
||||
case "UIAccessTopMost":
|
||||
// UIA置顶
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
if (MainWindow.Settings.Advanced != null)
|
||||
@@ -325,15 +253,10 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
break;
|
||||
|
||||
case "Mode":
|
||||
// 仅PPT模式
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchMode", newState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选项按钮点击事件处理
|
||||
/// </summary>
|
||||
private void OptionButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
@@ -347,107 +270,80 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
switch (tag)
|
||||
{
|
||||
case "UpdateChannel_Release":
|
||||
// 选择稳定版
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
MainWindow.Settings.Startup.UpdateChannel = UpdateChannel.Release;
|
||||
}, "UpdateChannelSelector");
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("UpdateChannelSelector_Checked",
|
||||
new System.Windows.Controls.RadioButton { Tag = "Release" }, e);
|
||||
// 更新UI状态
|
||||
UpdateUpdateChannelButtons(true);
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("UpdateChannelSelector_Checked",
|
||||
new System.Windows.Controls.RadioButton { Tag = "Release" }, e);
|
||||
UpdateUpdateChannelButtons(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case "UpdateChannel_Beta":
|
||||
// 选择测试版
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
MainWindow.Settings.Startup.UpdateChannel = UpdateChannel.Beta;
|
||||
}, "UpdateChannelSelector");
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("UpdateChannelSelector_Checked",
|
||||
new System.Windows.Controls.RadioButton { Tag = "Beta" }, e);
|
||||
// 更新UI状态
|
||||
UpdateUpdateChannelButtons(false);
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("UpdateChannelSelector_Checked",
|
||||
new System.Windows.Controls.RadioButton { Tag = "Beta" }, e);
|
||||
UpdateUpdateChannelButtons(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新更新通道按钮状态
|
||||
/// </summary>
|
||||
private void UpdateUpdateChannelButtons(bool isReleaseSelected)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 使用 ThemeHelper 的统一方法设置按钮状态,与其他选项按钮保持一致
|
||||
ThemeHelper.SetOptionButtonSelectedState(UpdateChannelReleaseBorder, isReleaseSelected);
|
||||
ThemeHelper.SetOptionButtonSelectedState(UpdateChannelBetaBorder, !isReleaseSelected);
|
||||
if (UpdateChannelReleaseBorder != null)
|
||||
{
|
||||
ThemeHelper.SetOptionButtonSelectedState(UpdateChannelReleaseBorder, isReleaseSelected);
|
||||
}
|
||||
|
||||
if (UpdateChannelBetaBorder != null)
|
||||
{
|
||||
ThemeHelper.SetOptionButtonSelectedState(UpdateChannelBetaBorder, !isReleaseSelected);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"更新更新通道按钮状态时出错: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 手动更新按钮点击事件
|
||||
/// </summary>
|
||||
private async void ManualUpdateButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("ManualUpdateButton_Click", sender, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 版本修复按钮点击事件
|
||||
/// </summary>
|
||||
private async void FixVersionButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("FixVersionButton_Click", sender, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 历史版本回滚按钮点击事件
|
||||
/// </summary>
|
||||
private void HistoryRollbackButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 查找 MainWindow 中的历史版本回滚方法
|
||||
MainWindowSettingsHelper.InvokeMainWindowMethod("HistoryRollbackButton_Click", sender, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ComboBox选择变化事件处理
|
||||
/// </summary>
|
||||
private void AutoUpdateWithSilenceStartTimeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
// 直接调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeComboBoxSelectionChanged("AutoUpdateWithSilenceStartTimeComboBox", AutoUpdateWithSilenceStartTimeComboBox?.SelectedItem);
|
||||
}
|
||||
|
||||
private void AutoUpdateWithSilenceEndTimeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
// 直接调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeComboBoxSelectionChanged("AutoUpdateWithSilenceEndTimeComboBox", AutoUpdateWithSilenceEndTimeComboBox?.SelectedItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 应用主题
|
||||
/// </summary>
|
||||
public void ApplyTheme()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 更新更新通道按钮 - 使用统一的方法保持与其他选项按钮一致
|
||||
if (MainWindow.Settings?.Startup != null)
|
||||
bool isDarkTheme = ThemeHelper.IsDarkTheme;
|
||||
// 更新更新通道按钮状态
|
||||
if (MainWindow.Settings.Startup.UpdateChannel == UpdateChannel.Release)
|
||||
{
|
||||
bool isReleaseSelected = MainWindow.Settings.Startup.UpdateChannel == UpdateChannel.Release;
|
||||
UpdateUpdateChannelButtons(isReleaseSelected);
|
||||
UpdateUpdateChannelButtons(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateUpdateChannelButtons(false);
|
||||
}
|
||||
|
||||
// 更新按钮
|
||||
if (ManualUpdateButton != null)
|
||||
{
|
||||
ManualUpdateButton.Background = ThemeHelper.GetButtonBackgroundBrush();
|
||||
@@ -463,19 +359,29 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
HistoryRollbackButton.Background = ThemeHelper.GetButtonBackgroundBrush();
|
||||
HistoryRollbackButton.Foreground = ThemeHelper.GetTextPrimaryBrush();
|
||||
}
|
||||
|
||||
// 使用 ThemeHelper 递归更新其他元素
|
||||
ThemeHelper.ApplyThemeToControl(this);
|
||||
|
||||
if (MainWindow.Settings?.Startup != null)
|
||||
{
|
||||
bool isReleaseSelected = MainWindow.Settings.Startup.UpdateChannel == UpdateChannel.Release;
|
||||
UpdateUpdateChannelButtons(isReleaseSelected);
|
||||
}
|
||||
UpdateComboBoxDropdownTheme(AutoUpdateWithSilenceStartTimeComboBox);
|
||||
UpdateComboBoxDropdownTheme(AutoUpdateWithSilenceEndTimeComboBox);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"StartupPanel 应用主题时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"StartupPanel 应用主题时出�? {ex.Message}");
|
||||
}
|
||||
}
|
||||
private void UpdateComboBoxDropdownTheme(System.Windows.Controls.ComboBox comboBox)
|
||||
{
|
||||
if (comboBox == null) return;
|
||||
comboBox.DropDownOpened -= ComboBox_DropDownOpened;
|
||||
comboBox.DropDownOpened += ComboBox_DropDownOpened;
|
||||
}
|
||||
private void ComboBox_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is System.Windows.Controls.ComboBox comboBox)
|
||||
{
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
ThemeHelper.UpdateComboBoxDropdownColors(comboBox);
|
||||
}), System.Windows.Threading.DispatcherPriority.Loaded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
@@ -48,7 +48,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
public static Color ButtonHoverBackground => IsDarkTheme ? Color.FromRgb(55, 55, 55) : Color.FromRgb(210, 210, 210);
|
||||
public static Color ToggleSwitchOnBackground => IsDarkTheme ? Color.FromRgb(0, 122, 204) : Color.FromRgb(53, 132, 228);
|
||||
public static Color ToggleSwitchOffBackground => IsDarkTheme ? ButtonBackground : Color.FromRgb(225, 225, 225);
|
||||
public static Color OptionButtonSelectedBackground => SelectedBackground;
|
||||
public static Color OptionButtonSelectedBackground => IsDarkTheme ? Color.FromRgb(62, 62, 62) : Color.FromRgb(235, 235, 235);
|
||||
public static Color OptionButtonUnselectedBackground => Colors.Transparent;
|
||||
public static Color OptionButtonSelectedBorder => IsDarkTheme ? Color.FromRgb(100, 100, 100) : Color.FromRgb(160, 160, 160);
|
||||
public static Color OptionButtonUnselectedBorder => IsDarkTheme ? Color.FromRgb(50, 50, 50) : Color.FromRgb(220, 220, 220);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Ink_Canvas;
|
||||
using Ink_Canvas;
|
||||
using iNKORE.UI.WPF.Helpers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -11,9 +11,6 @@ using Hardcodet.Wpf.TaskbarNotification;
|
||||
|
||||
namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
/// <summary>
|
||||
/// ThemePanel.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ThemePanel : UserControl
|
||||
{
|
||||
private bool _isLoaded = false;
|
||||
@@ -27,21 +24,15 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
private void ThemePanel_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
LoadSettings();
|
||||
// 添加触摸支持
|
||||
EnableTouchSupport();
|
||||
// 应用主题
|
||||
ApplyTheme();
|
||||
_isLoaded = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为面板中的所有交互控件启用触摸支持
|
||||
/// </summary>
|
||||
private void EnableTouchSupport()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 延迟执行,确保所有控件都已加载
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
MainWindowSettingsHelper.EnableTouchSupportForControls(this);
|
||||
@@ -49,7 +40,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"ThemePanel 启用触摸支持时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"ThemePanel 启用触摸支持时出�? {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,9 +61,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载设置到UI
|
||||
/// </summary>
|
||||
public void LoadSettings()
|
||||
{
|
||||
if (MainWindow.Settings == null || MainWindow.Settings.Appearance == null) return;
|
||||
@@ -83,33 +71,25 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
var appearance = MainWindow.Settings.Appearance;
|
||||
|
||||
// 主题设置
|
||||
SetOptionButtonState("Theme", appearance.Theme);
|
||||
|
||||
// 启用启动动画
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableSplashScreen"), appearance.EnableSplashScreen);
|
||||
if (SplashScreenStylePanel != null)
|
||||
{
|
||||
SplashScreenStylePanel.Visibility = appearance.EnableSplashScreen ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
// 启动动画样式
|
||||
if (ComboBoxSplashScreenStyle != null)
|
||||
{
|
||||
ComboBoxSplashScreenStyle.SelectedIndex = Math.Min(appearance.SplashScreenStyle, ComboBoxSplashScreenStyle.Items.Count - 1);
|
||||
}
|
||||
|
||||
// 浮动工具栏图标
|
||||
if (ComboBoxFloatingBarImg != null)
|
||||
{
|
||||
// 更新自定义图标列表(如果需要)
|
||||
// UpdateCustomIconsInComboBox();
|
||||
|
||||
int selectedIndex = Math.Min(appearance.FloatingBarImg, ComboBoxFloatingBarImg.Items.Count - 1);
|
||||
ComboBoxFloatingBarImg.SelectedIndex = selectedIndex;
|
||||
}
|
||||
|
||||
// 浮动工具栏缩放
|
||||
if (ViewboxFloatingBarScaleTransformValueSlider != null)
|
||||
{
|
||||
double val = appearance.ViewboxFloatingBarScaleTransformValue;
|
||||
@@ -121,7 +101,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
// 浮动工具栏透明度
|
||||
if (ViewboxFloatingBarOpacityValueSlider != null)
|
||||
{
|
||||
ViewboxFloatingBarOpacityValueSlider.Value = appearance.ViewboxFloatingBarOpacityValue;
|
||||
@@ -131,7 +110,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
// 浮栏在PPT下透明度
|
||||
if (ViewboxFloatingBarOpacityInPPTValueSlider != null)
|
||||
{
|
||||
ViewboxFloatingBarOpacityInPPTValueSlider.Value = appearance.ViewboxFloatingBarOpacityInPPTValue;
|
||||
@@ -141,16 +119,13 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
// 在调色盘窗口中显示笔尖模式按钮
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableDisPlayNibModeToggle"), appearance.IsEnableDisPlayNibModeToggler);
|
||||
|
||||
// 使用老版浮动栏按钮UI
|
||||
if (CheckBoxUseLegacyFloatingBarUI != null)
|
||||
{
|
||||
CheckBoxUseLegacyFloatingBarUI.IsChecked = appearance.UseLegacyFloatingBarUI;
|
||||
}
|
||||
|
||||
// 浮动栏按钮显示控制
|
||||
if (CheckBoxShowShapeButton != null) CheckBoxShowShapeButton.IsChecked = appearance.IsShowShapeButton;
|
||||
if (CheckBoxShowUndoButton != null) CheckBoxShowUndoButton.IsChecked = appearance.IsShowUndoButton;
|
||||
if (CheckBoxShowRedoButton != null) CheckBoxShowRedoButton.IsChecked = appearance.IsShowRedoButton;
|
||||
@@ -161,76 +136,58 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
if (CheckBoxShowLassoSelectButton != null) CheckBoxShowLassoSelectButton.IsChecked = appearance.IsShowLassoSelectButton;
|
||||
if (CheckBoxShowClearAndMouseButton != null) CheckBoxShowClearAndMouseButton.IsChecked = appearance.IsShowClearAndMouseButton;
|
||||
|
||||
// 启用系统托盘图标
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableTrayIcon"), appearance.EnableTrayIcon);
|
||||
|
||||
// 画板UI缩放
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableViewboxBlackBoardScaleTransform"), appearance.EnableViewboxBlackBoardScaleTransform);
|
||||
|
||||
// 白板模式时间显示
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableTimeDisplayInWhiteboardMode"), appearance.EnableTimeDisplayInWhiteboardMode);
|
||||
|
||||
// 白板模式鸡汤文
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableChickenSoupInWhiteboardMode"), appearance.EnableChickenSoupInWhiteboardMode);
|
||||
|
||||
// 启用快捷面板
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchEnableQuickPanel"), appearance.IsShowQuickPanel);
|
||||
|
||||
// 退出折叠模式后自动进入批注模式
|
||||
if (MainWindow.Settings.Automation != null)
|
||||
{
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode"), MainWindow.Settings.Automation.IsAutoEnterAnnotationModeWhenExitFoldMode);
|
||||
}
|
||||
|
||||
// PPT放映结束后自动折叠
|
||||
if (MainWindow.Settings.Automation != null)
|
||||
{
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchAutoFoldAfterPPTSlideShow"), MainWindow.Settings.Automation.IsAutoFoldAfterPPTSlideShow);
|
||||
}
|
||||
|
||||
// 退出白板模式后自动折叠
|
||||
if (MainWindow.Settings.Automation != null)
|
||||
{
|
||||
SetToggleSwitchState(FindToggleSwitch("ToggleSwitchAutoFoldWhenExitWhiteboard"), MainWindow.Settings.Automation.IsAutoFoldWhenExitWhiteboard);
|
||||
}
|
||||
|
||||
// 信仰の源出自Where?
|
||||
SetOptionButtonState("ChickenSoupSource", appearance.ChickenSoupSource);
|
||||
|
||||
// 取消收纳按钮图标
|
||||
SetOptionButtonState("UnFoldBtnImg", appearance.UnFoldButtonImageType);
|
||||
|
||||
// 快捷调色盘显示模式
|
||||
SetOptionButtonState("QuickColorPaletteDisplayMode", appearance.QuickColorPaletteDisplayMode);
|
||||
|
||||
// 橡皮按钮显示
|
||||
SetOptionButtonState("EraserDisplayOption", appearance.EraserDisplayOption);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"加载个性化设置时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"加载个性化设置时出�? {ex.Message}");
|
||||
}
|
||||
|
||||
_isLoaded = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找ToggleSwitch控件
|
||||
/// </summary>
|
||||
private Border FindToggleSwitch(string name)
|
||||
{
|
||||
return this.FindDescendantByName(name) as Border;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置ToggleSwitch状态
|
||||
/// </summary>
|
||||
private void SetToggleSwitchState(Border toggleSwitch, bool isOn)
|
||||
{
|
||||
if (toggleSwitch == null) return;
|
||||
toggleSwitch.Background = isOn
|
||||
? new SolidColorBrush(Color.FromRgb(53, 132, 228))
|
||||
: new SolidColorBrush(Color.FromRgb(225, 225, 225));
|
||||
? ThemeHelper.GetToggleSwitchOnBackgroundBrush()
|
||||
: ThemeHelper.GetToggleSwitchOffBackgroundBrush();
|
||||
var innerBorder = toggleSwitch.Child as Border;
|
||||
if (innerBorder != null)
|
||||
{
|
||||
@@ -238,9 +195,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ToggleSwitch点击事件处理
|
||||
/// </summary>
|
||||
private void ToggleSwitch_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
@@ -248,7 +202,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
var border = sender as Border;
|
||||
if (border == null) return;
|
||||
|
||||
bool isOn = border.Background.ToString() == "#FF3584E4";
|
||||
bool isOn = ThemeHelper.IsToggleSwitchOn(border.Background);
|
||||
bool newState = !isOn;
|
||||
SetToggleSwitchState(border, newState);
|
||||
|
||||
@@ -261,9 +215,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
switch (tag)
|
||||
{
|
||||
case "EnableSplashScreen":
|
||||
// 调用 MainWindow 中的方法(带主题检查)
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggledWithThemeCheck("ToggleSwitchEnableSplashScreen", newState);
|
||||
// 更新UI状态
|
||||
if (SplashScreenStylePanel != null)
|
||||
{
|
||||
SplashScreenStylePanel.Visibility = newState ? Visibility.Visible : Visibility.Collapsed;
|
||||
@@ -271,14 +223,11 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
break;
|
||||
|
||||
case "EnableDisPlayNibModeToggle":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchEnableDisPlayNibModeToggle", newState);
|
||||
break;
|
||||
|
||||
case "EnableTrayIcon":
|
||||
// 调用 MainWindow 中的方法(带主题检查)
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggledWithThemeCheck("ToggleSwitchEnableTrayIcon", newState);
|
||||
// 更新系统托盘图标可见性
|
||||
var taskbar = Application.Current.Resources["TaskbarTrayIcon"] as TaskbarIcon;
|
||||
if (taskbar != null)
|
||||
{
|
||||
@@ -287,51 +236,40 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
break;
|
||||
|
||||
case "EnableViewboxBlackBoardScaleTransform":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchEnableViewboxBlackBoardScaleTransform", newState);
|
||||
break;
|
||||
|
||||
case "EnableTimeDisplayInWhiteboardMode":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchEnableTimeDisplayInWhiteboardMode", newState);
|
||||
break;
|
||||
|
||||
case "EnableChickenSoupInWhiteboardMode":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchEnableChickenSoupInWhiteboardMode", newState);
|
||||
break;
|
||||
|
||||
case "EnableQuickPanel":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchEnableQuickPanel", newState);
|
||||
break;
|
||||
|
||||
case "AutoEnterAnnotationModeWhenExitFoldMode":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode", newState);
|
||||
break;
|
||||
|
||||
case "AutoFoldAfterPPTSlideShow":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchAutoFoldAfterPPTSlideShow", newState);
|
||||
break;
|
||||
|
||||
case "AutoFoldWhenExitWhiteboard":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchAutoFoldWhenExitWhiteboard", newState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ComboBox选择变化事件处理
|
||||
/// </summary>
|
||||
private void ComboBoxSplashScreenStyle_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
if (ComboBoxSplashScreenStyle?.SelectedIndex >= 0)
|
||||
{
|
||||
// 调用 MainWindow 中的方法(带主题检查)
|
||||
MainWindowSettingsHelper.InvokeComboBoxSelectionChangedWithThemeCheck("ComboBoxSplashScreenStyle", ComboBoxSplashScreenStyle.SelectedItem);
|
||||
}
|
||||
}
|
||||
@@ -341,14 +279,10 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
if (!_isLoaded) return;
|
||||
if (ComboBoxFloatingBarImg?.SelectedIndex >= 0)
|
||||
{
|
||||
// 调用 MainWindow 中的方法(带主题检查)
|
||||
MainWindowSettingsHelper.InvokeComboBoxSelectionChangedWithThemeCheck("ComboBoxFloatingBarImg", ComboBoxFloatingBarImg.SelectedItem);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Slider值变化事件处理
|
||||
/// </summary>
|
||||
private void ViewboxFloatingBarScaleTransformValueSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
@@ -356,7 +290,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
double val = ViewboxFloatingBarScaleTransformValueSlider.Value;
|
||||
ViewboxFloatingBarScaleTransformValueText.Text = val.ToString("F2");
|
||||
// 调用 MainWindow 中的方法(会自动检查主题更新)
|
||||
MainWindowSettingsHelper.InvokeSliderValueChanged("ViewboxFloatingBarScaleTransformValueSlider", val);
|
||||
}
|
||||
}
|
||||
@@ -368,7 +301,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
double val = ViewboxFloatingBarOpacityValueSlider.Value;
|
||||
ViewboxFloatingBarOpacityValueText.Text = val.ToString("F2");
|
||||
// 调用 MainWindow 中的方法(会自动检查主题更新)
|
||||
MainWindowSettingsHelper.InvokeSliderValueChanged("ViewboxFloatingBarOpacityValueSlider", val);
|
||||
}
|
||||
}
|
||||
@@ -380,14 +312,10 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
{
|
||||
double val = ViewboxFloatingBarOpacityInPPTValueSlider.Value;
|
||||
ViewboxFloatingBarOpacityInPPTValueText.Text = val.ToString("F2");
|
||||
// 调用 MainWindow 中的方法(会自动检查主题更新)
|
||||
MainWindowSettingsHelper.InvokeSliderValueChanged("ViewboxFloatingBarOpacityInPPTValueSlider", val);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// CheckBox变化事件处理
|
||||
/// </summary>
|
||||
private void CheckBox_CheckedChanged(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
@@ -402,60 +330,47 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
switch (name)
|
||||
{
|
||||
case "CheckBoxUseLegacyFloatingBarUI":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxUseLegacyFloatingBarUI", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowShapeButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowShapeButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowUndoButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowUndoButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowRedoButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowRedoButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowClearButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowClearButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowWhiteboardButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowWhiteboardButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowHideButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowHideButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowQuickColorPalette":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowQuickColorPalette", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowLassoSelectButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowLassoSelectButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
|
||||
case "CheckBoxShowClearAndMouseButton":
|
||||
// 调用 MainWindow 中的方法
|
||||
MainWindowSettingsHelper.InvokeCheckBoxCheckedChanged("CheckBoxShowClearAndMouseButton", checkBox.IsChecked ?? false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置选项按钮状态
|
||||
/// </summary>
|
||||
private void SetOptionButtonState(string group, int selectedIndex)
|
||||
{
|
||||
var buttons = new Dictionary<string, string[]>
|
||||
@@ -476,31 +391,11 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
var button = this.FindDescendantByName($"{group}{buttonNames[i]}Border") as Border;
|
||||
if (button != null)
|
||||
{
|
||||
if (i == selectedIndex)
|
||||
{
|
||||
button.Background = new SolidColorBrush(Color.FromRgb(225, 225, 225));
|
||||
var textBlock = button.Child as TextBlock;
|
||||
if (textBlock != null)
|
||||
{
|
||||
textBlock.FontWeight = FontWeights.Bold;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
button.Background = new SolidColorBrush(Colors.Transparent);
|
||||
var textBlock = button.Child as TextBlock;
|
||||
if (textBlock != null)
|
||||
{
|
||||
textBlock.FontWeight = FontWeights.Normal;
|
||||
}
|
||||
}
|
||||
ThemeHelper.SetOptionButtonSelectedState(button, i == selectedIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选项按钮点击事件处理
|
||||
/// </summary>
|
||||
private void OptionButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!_isLoaded) return;
|
||||
@@ -517,7 +412,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
string group = parts[0];
|
||||
string value = parts[1];
|
||||
|
||||
// 清除同组其他按钮的选中状态
|
||||
var parent = border.Parent as Panel;
|
||||
if (parent != null)
|
||||
{
|
||||
@@ -528,24 +422,13 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
string childTag = childBorder.Tag?.ToString();
|
||||
if (!string.IsNullOrEmpty(childTag) && childTag.StartsWith(group + "_"))
|
||||
{
|
||||
childBorder.Background = new SolidColorBrush(Colors.Transparent);
|
||||
var textBlock = childBorder.Child as TextBlock;
|
||||
if (textBlock != null)
|
||||
{
|
||||
textBlock.FontWeight = FontWeights.Normal;
|
||||
}
|
||||
ThemeHelper.SetOptionButtonSelectedState(childBorder, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 设置当前按钮为选中状态
|
||||
border.Background = new SolidColorBrush(Color.FromRgb(225, 225, 225));
|
||||
var currentTextBlock = border.Child as TextBlock;
|
||||
if (currentTextBlock != null)
|
||||
{
|
||||
currentTextBlock.FontWeight = FontWeights.Bold;
|
||||
}
|
||||
ThemeHelper.SetOptionButtonSelectedState(border, true);
|
||||
|
||||
var appearance = MainWindow.Settings.Appearance;
|
||||
if (appearance == null) return;
|
||||
@@ -553,7 +436,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
switch (group)
|
||||
{
|
||||
case "Theme":
|
||||
// 通过 MainWindowSettingsHelper 调用 ComboBoxTheme 的 SelectionChanged 事件处理器
|
||||
try
|
||||
{
|
||||
var mainWindow = Application.Current.MainWindow as MainWindow;
|
||||
@@ -562,23 +444,22 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
var comboBox = mainWindow.FindName("ComboBoxTheme") as System.Windows.Controls.ComboBox;
|
||||
if (comboBox != null)
|
||||
{
|
||||
// 根据 value 找到对应的 ComboBoxItem
|
||||
int themeIndex;
|
||||
switch (value)
|
||||
{
|
||||
case "Light":
|
||||
themeIndex = 0;
|
||||
break;
|
||||
case "Dark":
|
||||
themeIndex = 1;
|
||||
break;
|
||||
case "System":
|
||||
themeIndex = 2;
|
||||
break;
|
||||
default:
|
||||
themeIndex = 2;
|
||||
break;
|
||||
}
|
||||
int themeIndex;
|
||||
switch (value)
|
||||
{
|
||||
case "Light":
|
||||
themeIndex = 0;
|
||||
break;
|
||||
case "Dark":
|
||||
themeIndex = 1;
|
||||
break;
|
||||
case "System":
|
||||
themeIndex = 2;
|
||||
break;
|
||||
default:
|
||||
themeIndex = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if (comboBox.Items.Count > themeIndex)
|
||||
{
|
||||
@@ -586,21 +467,18 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
MainWindowSettingsHelper.InvokeComboBoxSelectionChangedWithThemeCheck("ComboBoxTheme", selectedItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果找不到控件,直接更新设置并通知主题更新
|
||||
{
|
||||
MainWindowSettingsHelper.UpdateSettingSafely(() =>
|
||||
{
|
||||
appearance.Theme = themeIndex;
|
||||
}, "ComboBoxTheme_SelectionChanged", "ComboBoxTheme");
|
||||
MainWindowSettingsHelper.NotifyThemeUpdateIfNeeded("ComboBoxTheme");
|
||||
|
||||
// 触发主题变化事件,通知设置窗口更新主题
|
||||
ThemeChanged?.Invoke(this, new RoutedEventArgs());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果找不到控件,直接更新设置并通知主题更新
|
||||
int themeIndex;
|
||||
switch (value)
|
||||
{
|
||||
@@ -622,15 +500,14 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
appearance.Theme = themeIndex;
|
||||
}, "ComboBoxTheme_SelectionChanged", "ComboBoxTheme");
|
||||
MainWindowSettingsHelper.NotifyThemeUpdateIfNeeded("ComboBoxTheme");
|
||||
|
||||
// 触发主题变化事件,通知设置窗口更新主题
|
||||
ThemeChanged?.Invoke(this, new RoutedEventArgs());
|
||||
|
||||
ThemeChanged?.Invoke(this, new RoutedEventArgs());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"切换主题时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"切换主题时出�? {ex.Message}");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -654,7 +531,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
sourceIndex = 3;
|
||||
break;
|
||||
}
|
||||
// 调用 MainWindow 中的方法
|
||||
var mainWindow6 = Application.Current.MainWindow as MainWindow;
|
||||
if (mainWindow6 != null)
|
||||
{
|
||||
@@ -666,10 +542,9 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果找不到控件,直接更新设置
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
appearance.ChickenSoupSource = sourceIndex;
|
||||
appearance.ChickenSoupSource = sourceIndex;
|
||||
}, "ComboBoxChickenSoupSource");
|
||||
}
|
||||
}
|
||||
@@ -689,7 +564,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
imgType = 0;
|
||||
break;
|
||||
}
|
||||
// 调用 MainWindow 中的方法(带主题检查)
|
||||
var mainWindow3 = Application.Current.MainWindow as MainWindow;
|
||||
if (mainWindow3 != null)
|
||||
{
|
||||
@@ -701,10 +575,9 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果找不到控件,直接更新设置并通知主题更新
|
||||
MainWindowSettingsHelper.UpdateSettingSafely(() =>
|
||||
{
|
||||
appearance.UnFoldButtonImageType = imgType;
|
||||
appearance.UnFoldButtonImageType = imgType;
|
||||
}, "ComboBoxUnFoldBtnImg_SelectionChanged", "ComboBoxUnFoldBtnImg");
|
||||
MainWindowSettingsHelper.NotifyThemeUpdateIfNeeded("ComboBoxUnFoldBtnImg");
|
||||
}
|
||||
@@ -725,7 +598,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
displayMode = 1;
|
||||
break;
|
||||
}
|
||||
// 调用 MainWindow 中的方法
|
||||
var mainWindow4 = Application.Current.MainWindow as MainWindow;
|
||||
if (mainWindow4 != null)
|
||||
{
|
||||
@@ -737,10 +609,9 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果找不到控件,直接更新设置
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
appearance.QuickColorPaletteDisplayMode = displayMode;
|
||||
appearance.QuickColorPaletteDisplayMode = displayMode;
|
||||
}, "ComboBoxQuickColorPaletteDisplayMode");
|
||||
}
|
||||
}
|
||||
@@ -766,7 +637,6 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
eraserOption = 0;
|
||||
break;
|
||||
}
|
||||
// 调用 MainWindow 中的方法
|
||||
var mainWindow5 = Application.Current.MainWindow as MainWindow;
|
||||
if (mainWindow5 != null)
|
||||
{
|
||||
@@ -778,10 +648,9 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果找不到控件,直接更新设置
|
||||
MainWindowSettingsHelper.UpdateSettingDirectly(() =>
|
||||
{
|
||||
appearance.EraserDisplayOption = eraserOption;
|
||||
appearance.EraserDisplayOption = eraserOption;
|
||||
}, "ComboBoxEraserDisplayOption");
|
||||
}
|
||||
}
|
||||
@@ -789,18 +658,46 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 应用主题
|
||||
/// </summary>
|
||||
public void ApplyTheme()
|
||||
{
|
||||
try
|
||||
{
|
||||
ThemeHelper.ApplyThemeToControl(this);
|
||||
if (MainWindow.Settings?.Appearance != null)
|
||||
{
|
||||
var appearance = MainWindow.Settings.Appearance;
|
||||
SetOptionButtonState("Theme", appearance.Theme);
|
||||
SetOptionButtonState("ChickenSoupSource", appearance.ChickenSoupSource);
|
||||
SetOptionButtonState("UnFoldBtnImg", appearance.UnFoldButtonImageType);
|
||||
SetOptionButtonState("QuickColorPaletteDisplayMode", appearance.QuickColorPaletteDisplayMode);
|
||||
SetOptionButtonState("EraserDisplayOption", appearance.EraserDisplayOption);
|
||||
}
|
||||
|
||||
UpdateComboBoxDropdownTheme(ComboBoxSplashScreenStyle);
|
||||
UpdateComboBoxDropdownTheme(ComboBoxFloatingBarImg);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"ThemePanel 应用主题时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"ThemePanel 应用主题时出�? {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateComboBoxDropdownTheme(System.Windows.Controls.ComboBox comboBox)
|
||||
{
|
||||
if (comboBox == null) return;
|
||||
|
||||
comboBox.DropDownOpened -= ComboBox_DropDownOpened;
|
||||
comboBox.DropDownOpened += ComboBox_DropDownOpened;
|
||||
}
|
||||
|
||||
private void ComboBox_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
if (sender is System.Windows.Controls.ComboBox comboBox)
|
||||
{
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
ThemeHelper.UpdateComboBoxDropdownColors(comboBox);
|
||||
}), System.Windows.Threading.DispatcherPriority.Loaded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace Ink_Canvas.Windows.SettingsViews
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"TimerPanel 应用主题时出错: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"TimerPanel 应用主题时出�? {ex.Message}");
|
||||
}
|
||||
}
|
||||
private void TimerVolumeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||
|
||||
Reference in New Issue
Block a user