This commit is contained in:
PrefacedCorg
2026-04-26 16:38:54 +08:00
parent adebf8ec38
commit 9132c9eb14
5 changed files with 336 additions and 231 deletions
+6 -1
View File
@@ -1,4 +1,4 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
@@ -54,6 +54,11 @@ namespace Ink_Canvas.Helpers
[DllImport("user32.dll")] [DllImport("user32.dll")]
private static extern IntPtr MonitorFromRect(ref RECT lprc, uint dwFlags); private static extern IntPtr MonitorFromRect(ref RECT lprc, uint dwFlags);
public static IntPtr GetForegroundWindowHandle()
{
return GetForegroundWindow();
}
public static string WindowTitle() public static string WindowTitle()
{ {
IntPtr foregroundWindowHandle = GetForegroundWindow(); IntPtr foregroundWindowHandle = GetForegroundWindow();
+174 -119
View File
@@ -709,10 +709,11 @@ namespace Ink_Canvas
var fullScreenWindows = _windowOverviewModel.GetFullScreenWindows(); var fullScreenWindows = _windowOverviewModel.GetFullScreenWindows();
if (fullScreenWindows == null || fullScreenWindows.Count == 0) return false; if (fullScreenWindows == null || fullScreenWindows.Count == 0) return false;
var foregroundHandle = ForegroundWindowInfo.GetForegroundWindowHandle();
foreach (var window in fullScreenWindows) foreach (var window in fullScreenWindows)
{ {
var windowProcessName = window.ProcessName; var windowProcessName = window.ProcessName;
var windowRect = window.Rect;
if (windowProcessName == "EasiNote") if (windowProcessName == "EasiNote")
{ {
@@ -724,15 +725,18 @@ namespace Ink_Canvas
string version = versionInfo.FileVersion; string version = versionInfo.FileVersion;
string prodName = versionInfo.ProductName; string prodName = versionInfo.ProductName;
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote) if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote &&
window.Handle == foregroundHandle)
{ {
return true; return true;
} }
else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3) else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3 &&
window.Handle == foregroundHandle)
{ {
return true; return true;
} }
else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C) else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C &&
window.Handle == foregroundHandle)
{ {
return true; return true;
} }
@@ -840,19 +844,15 @@ namespace Ink_Canvas
try try
{ {
// 从窗口预览模型中获取窗口列表(已按ZOrder排序,最上层在前)
var windows = _windowOverviewModel.Windows; var windows = _windowOverviewModel.Windows;
if (windows == null || windows.Count == 0) return false; if (windows == null || windows.Count == 0) return false;
// 获取前台窗口(ZOrder最小的窗口,即最上层) var foregroundHandle = ForegroundWindowInfo.GetForegroundWindowHandle();
var foregroundWindow = windows.FirstOrDefault(); var foregroundWindow = windows.FirstOrDefault(w => w.Handle == foregroundHandle);
if (foregroundWindow == null) return false; if (foregroundWindow == null) return false;
var windowProcessName = foregroundWindow.ProcessName; var windowProcessName = foregroundWindow.ProcessName;
var windowTitle = foregroundWindow.Title;
var windowRect = foregroundWindow.Rect;
// 检查EasiNote
if (windowProcessName == "EasiNote") if (windowProcessName == "EasiNote")
{ {
if (foregroundWindow.ProcessPath != "Unknown") if (foregroundWindow.ProcessPath != "Unknown")
@@ -863,25 +863,18 @@ namespace Ink_Canvas
string version = versionInfo.FileVersion; string version = versionInfo.FileVersion;
string prodName = versionInfo.ProductName; string prodName = versionInfo.ProductName;
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote) if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote &&
foregroundWindow.IsFullScreen)
{ {
bool isAnnotationWindow = windowTitle.Length == 0 && windowRect.Height < 500; return true;
if (Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno && isAnnotationWindow)
{
return true;
}
else if (!isAnnotationWindow)
{
return true;
}
} }
else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3) else if (version.StartsWith("3.") && Settings.Automation.IsAutoFoldInEasiNote3 &&
foregroundWindow.IsFullScreen)
{ {
return true; return true;
} }
else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C && else if (prodName.Contains("3C") && Settings.Automation.IsAutoFoldInEasiNote3C &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
@@ -889,100 +882,78 @@ namespace Ink_Canvas
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); }
} }
} }
// 检查EasiCamera
else if (Settings.Automation.IsAutoFoldInEasiCamera && windowProcessName == "EasiCamera" && else if (Settings.Automation.IsAutoFoldInEasiCamera && windowProcessName == "EasiCamera" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查EasiNote5C
else if (Settings.Automation.IsAutoFoldInEasiNote5C && windowProcessName == "EasiNote5C" && else if (Settings.Automation.IsAutoFoldInEasiNote5C && windowProcessName == "EasiNote5C" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查SeewoPinco
else if (Settings.Automation.IsAutoFoldInSeewoPincoTeacher && else if (Settings.Automation.IsAutoFoldInSeewoPincoTeacher &&
(windowProcessName == "BoardService" || windowProcessName == "seewoPincoTeacher")) (windowProcessName == "BoardService" || windowProcessName == "seewoPincoTeacher") &&
foregroundWindow.IsFullScreen)
{ {
return true; return true;
} }
// 检查HiteCamera
else if (Settings.Automation.IsAutoFoldInHiteCamera && windowProcessName == "HiteCamera" && else if (Settings.Automation.IsAutoFoldInHiteCamera && windowProcessName == "HiteCamera" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查HiteTouchPro
else if (Settings.Automation.IsAutoFoldInHiteTouchPro && windowProcessName == "HiteTouchPro" && else if (Settings.Automation.IsAutoFoldInHiteTouchPro && windowProcessName == "HiteTouchPro" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查WxBoardMain
else if (Settings.Automation.IsAutoFoldInWxBoardMain && windowProcessName == "WxBoardMain" && else if (Settings.Automation.IsAutoFoldInWxBoardMain && windowProcessName == "WxBoardMain" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查MSWhiteboard
else if (Settings.Automation.IsAutoFoldInMSWhiteboard && else if (Settings.Automation.IsAutoFoldInMSWhiteboard &&
(windowProcessName == "MicrosoftWhiteboard" || windowProcessName == "msedgewebview2")) (windowProcessName == "MicrosoftWhiteboard" || windowProcessName == "msedgewebview2") &&
foregroundWindow.IsFullScreen)
{ {
return true; return true;
} }
// 检查OldZyBoard
else if (Settings.Automation.IsAutoFoldInOldZyBoard && else if (Settings.Automation.IsAutoFoldInOldZyBoard &&
(WinTabWindowsChecker.IsWindowExisted("WhiteBoard - DrawingWindow") || (WinTabWindowsChecker.IsWindowExisted("WhiteBoard - DrawingWindow") ||
WinTabWindowsChecker.IsWindowExisted("InstantAnnotationWindow"))) WinTabWindowsChecker.IsWindowExisted("InstantAnnotationWindow")) &&
foregroundWindow.IsFullScreen)
{ {
return true; return true;
} }
// 检查HiteLightBoard
else if (Settings.Automation.IsAutoFoldInHiteLightBoard && windowProcessName == "HiteLightBoard" && else if (Settings.Automation.IsAutoFoldInHiteLightBoard && windowProcessName == "HiteLightBoard" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查AdmoxWhiteboard
else if (Settings.Automation.IsAutoFoldInAdmoxWhiteboard && windowProcessName == "Amdox.WhiteBoard" && else if (Settings.Automation.IsAutoFoldInAdmoxWhiteboard && windowProcessName == "Amdox.WhiteBoard" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查AdmoxBooth
else if (Settings.Automation.IsAutoFoldInAdmoxBooth && windowProcessName == "Amdox.Booth" && else if (Settings.Automation.IsAutoFoldInAdmoxBooth && windowProcessName == "Amdox.Booth" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查QPoint
else if (Settings.Automation.IsAutoFoldInQPoint && windowProcessName == "QPoint" && else if (Settings.Automation.IsAutoFoldInQPoint && windowProcessName == "QPoint" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查YiYunVisualPresenter
else if (Settings.Automation.IsAutoFoldInYiYunVisualPresenter && windowProcessName == "YiYunVisualPresenter" && else if (Settings.Automation.IsAutoFoldInYiYunVisualPresenter && windowProcessName == "YiYunVisualPresenter" &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
return true; return true;
} }
// 检查MaxHubWhiteboard
else if (Settings.Automation.IsAutoFoldInMaxHubWhiteboard && windowProcessName == "WhiteBoard" && else if (Settings.Automation.IsAutoFoldInMaxHubWhiteboard && windowProcessName == "WhiteBoard" &&
WinTabWindowsChecker.IsWindowExisted("白板书写") && WinTabWindowsChecker.IsWindowExisted("白板书写") &&
windowRect.Height >= SystemParameters.WorkArea.Height - 16 && foregroundWindow.IsFullScreen)
windowRect.Width >= SystemParameters.WorkArea.Width - 16)
{ {
if (foregroundWindow.ProcessPath != "Unknown") if (foregroundWindow.ProcessPath != "Unknown")
{ {
@@ -1023,19 +994,23 @@ namespace Ink_Canvas
/// </remarks> /// </remarks>
private void timerCheckAutoFold_Elapsed(object sender, ElapsedEventArgs e) private void timerCheckAutoFold_Elapsed(object sender, ElapsedEventArgs e)
{ {
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
if (isFloatingBarChangingHideMode) return; if (isFloatingBarChangingHideMode) return;
try try
{ {
bool hasFullScreen = HasFullScreenWindowOfAutoFoldApps(); bool hasFullScreen = HasFullScreenWindowOfAutoFoldApps();
bool shouldAutoFold = CheckShouldAutoFoldByWindowPreview(); bool shouldAutoFold = CheckShouldAutoFoldByWindowPreview();
var windowProcessName = ForegroundWindowInfo.ProcessName();
var windowTitle = ForegroundWindowInfo.WindowTitle();
Thickness currentMargin = new Thickness(); Thickness currentMargin = new Thickness();
Dispatcher.Invoke(() => try
{ {
currentMargin = ViewboxFloatingBar.Margin; if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
}); Dispatcher.Invoke(() => { currentMargin = ViewboxFloatingBar.Margin; });
}
catch (Exception)
{
return;
}
if (hasFullScreen) if (hasFullScreen)
{ {
@@ -1052,38 +1027,7 @@ namespace Ink_Canvas
if (shouldAutoFold) if (shouldAutoFold)
{ {
if (windowProcessName == "EasiNote") if (!unfoldFloatingBarByUser && !isFloatingBarFolded)
{
if (ForegroundWindowInfo.ProcessPath() != "Unknown")
{
var versionInfo = FileVersionInfo.GetVersionInfo(ForegroundWindowInfo.ProcessPath());
string version = versionInfo.FileVersion;
if (version.StartsWith("5.") && Settings.Automation.IsAutoFoldInEasiNote)
{
bool isAnnotationWindow = windowTitle.Length == 0 && ForegroundWindowInfo.WindowRect().Height < 500;
if (Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno && isAnnotationWindow)
{
if (!isFloatingBarFolded)
{
FoldFloatingBar_MouseUp(null, null);
}
}
else if (!isAnnotationWindow)
{
if (!unfoldFloatingBarByUser && !isFloatingBarFolded)
{
FoldFloatingBar_MouseUp(null, null);
}
else if (unfoldFloatingBarByUser)
{
}
}
}
}
}
// 处理其他目标软件
else if (!unfoldFloatingBarByUser && !isFloatingBarFolded)
{ {
FoldFloatingBar_MouseUp(null, null); FoldFloatingBar_MouseUp(null, null);
} }
@@ -1099,11 +1043,13 @@ namespace Ink_Canvas
{ {
unfoldFloatingBarByUser = false; unfoldFloatingBarByUser = false;
} }
else else
{ {
UnFoldFloatingBar_MouseUp(new object(), null); // schedule unfold if dispatcher still running
unfoldFloatingBarByUser = false; if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
} UnFoldFloatingBar_MouseUp(new object(), null);
unfoldFloatingBarByUser = false;
}
} }
} }
} }
@@ -1221,8 +1167,11 @@ namespace Ink_Canvas
// 空闲状态的判定为不处于批注模式和画板模式 // 空闲状态的判定为不处于批注模式和画板模式
bool canSafelyUpdate = false; bool canSafelyUpdate = false;
Dispatcher.Invoke(() => try
{ {
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
Dispatcher.Invoke(() =>
{
try try
{ {
// 判断是否处于批注模式(inkCanvas.EditingMode == InkCanvasEditingMode.Ink // 判断是否处于批注模式(inkCanvas.EditingMode == InkCanvasEditingMode.Ink
@@ -1244,12 +1193,18 @@ namespace Ink_Canvas
{ {
LogHelper.WriteLogToFile("AutoUpdate | Application is in ink or board mode, cannot update now"); LogHelper.WriteLogToFile("AutoUpdate | Application is in ink or board mode, cannot update now");
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
LogHelper.WriteLogToFile($"AutoUpdate | Error checking application state: {ex.Message}", LogHelper.LogType.Error); LogHelper.WriteLogToFile($"AutoUpdate | Error checking application state: {ex.Message}", LogHelper.LogType.Error);
} }
}); });
}
catch (Exception)
{
// Dispatcher not available
return;
}
if (canSafelyUpdate) if (canSafelyUpdate)
{ {
@@ -1262,10 +1217,12 @@ namespace Ink_Canvas
AutoUpdateHelper.InstallNewVersionApp(AvailableLatestVersion, true); AutoUpdateHelper.InstallNewVersionApp(AvailableLatestVersion, true);
// 关闭应用程序 // 关闭应用程序
Dispatcher.Invoke(() => try
{ {
Application.Current.Shutdown(); if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
}); Dispatcher.Invoke(() => { Application.Current.Shutdown(); });
}
catch (Exception) { }
} }
else else
{ {
@@ -1411,6 +1368,98 @@ namespace Ink_Canvas
} }
} }
/// <summary>
/// 在窗口关闭时停止并释放所有定时器与事件,防止在 Dispatcher 关闭期间还有后台线程调用 UI
/// </summary>
private void StopAllTimersAndHandlers()
{
try
{
// Stop and detach System.Timers.Timer
if (_unifiedMainWindowTimer != null)
{
_unifiedMainWindowTimer.Stop();
_unifiedMainWindowTimer.Elapsed -= OnUnifiedMainWindowTimerElapsed;
_unifiedMainWindowTimer.Dispose();
_unifiedMainWindowTimer = null;
}
if (timerKillProcess != null)
{
timerKillProcess.Stop();
timerKillProcess.Elapsed -= TimerKillProcess_Elapsed;
timerKillProcess.Dispose();
timerKillProcess = null;
}
if (timerCheckAutoUpdateWithSilence != null)
{
timerCheckAutoUpdateWithSilence.Stop();
timerCheckAutoUpdateWithSilence.Elapsed -= timerCheckAutoUpdateWithSilence_Elapsed;
timerCheckAutoUpdateWithSilence.Dispose();
timerCheckAutoUpdateWithSilence = null;
}
if (timerCheckAutoUpdateRetry != null)
{
timerCheckAutoUpdateRetry.Stop();
timerCheckAutoUpdateRetry.Elapsed -= timerCheckAutoUpdateRetry_Elapsed;
timerCheckAutoUpdateRetry.Dispose();
timerCheckAutoUpdateRetry = null;
}
if (timerDisplayTime != null)
{
timerDisplayTime.Stop();
timerDisplayTime.Elapsed -= TimerDisplayTime_Elapsed;
timerDisplayTime.Dispose();
timerDisplayTime = null;
}
if (timerDisplayDate != null)
{
timerDisplayDate.Stop();
timerDisplayDate.Elapsed -= TimerDisplayDate_Elapsed;
timerDisplayDate.Dispose();
timerDisplayDate = null;
}
if (timerNtpSync != null)
{
timerNtpSync.Stop();
timerNtpSync.Elapsed -= async (s, e) => await TimerNtpSync_ElapsedAsync();
timerNtpSync.Dispose();
timerNtpSync = null;
}
// DispatcherTimers run on UI thread
if (autoSaveStrokesTimer != null)
{
autoSaveStrokesTimer.Stop();
autoSaveStrokesTimer.Tick -= AutoSaveStrokesTimer_Tick;
autoSaveStrokesTimer = null;
}
if (_eraserAutoSwitchBackTimer != null)
{
_eraserAutoSwitchBackTimer.Stop();
_eraserAutoSwitchBackTimer.Tick -= EraserAutoSwitchBackTimer_Tick;
_eraserAutoSwitchBackTimer = null;
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"StopAllTimers failed: {ex.Message}", LogHelper.LogType.Error);
}
}
protected override void OnClosing(CancelEventArgs e)
{
// Stop timers and handlers to avoid background callbacks invoking Dispatcher after shutdown
StopAllTimersAndHandlers();
base.OnClosing(e);
}
/// <summary> /// <summary>
/// 启动橡皮擦自动切换回批注模式计时器 /// 启动橡皮擦自动切换回批注模式计时器
/// </summary> /// </summary>
@@ -1463,6 +1512,7 @@ namespace Ink_Canvas
/// </summary> /// </summary>
private void EraserAutoSwitchBackTimer_Tick(object sender, EventArgs e) private void EraserAutoSwitchBackTimer_Tick(object sender, EventArgs e)
{ {
if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
try try
{ {
// 检查是否仍然在橡皮擦模式 // 检查是否仍然在橡皮擦模式
@@ -1481,12 +1531,17 @@ namespace Ink_Canvas
} }
// 切换到批注模式 // 切换到批注模式
Dispatcher.Invoke(() => try
{ {
PenIcon_Click(null, null); if (Dispatcher.HasShutdownStarted || Dispatcher.HasShutdownFinished) return;
StopEraserAutoSwitchBackTimer(); Dispatcher.Invoke(() =>
LogHelper.WriteLogToFile("橡皮擦自动切换回批注模式", LogHelper.LogType.Event); {
}); PenIcon_Click(null, null);
StopEraserAutoSwitchBackTimer();
LogHelper.WriteLogToFile("橡皮擦自动切换回批注模式", LogHelper.LogType.Event);
});
}
catch (Exception) { }
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -16,6 +16,7 @@
<Grid Margin="59,0,59,0"> <Grid Margin="59,0,59,0">
<FrameworkElement.Resources> <FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double> <sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<sys:Double x:Key="SettingsCardHeaderIconMaxSize">24</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle" <Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}" BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock"> TargetType="TextBlock">
@@ -25,185 +26,201 @@
</Style> </Style>
</FrameworkElement.Resources> </FrameworkElement.Resources>
<Grid> <Grid>
<ikw:SimpleStackPanel MaxWidth="1000" <ikw:SimpleStackPanel MaxWidth="1600"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}"> Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Text="{i18n:I18n Key=AutoFold_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/> <TextBlock Text="{i18n:I18n Key=Automation_AutoFoldTitle}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote" <Grid >
Header="希沃白板" <Grid.ColumnDefinitions>
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" <ColumnDefinition Width="114514*" />
Toggled="ToggleSwitchAutoFoldInEasiNote_Toggled"/> <ColumnDefinition Width="114514*" />
</Grid.ColumnDefinitions>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNoteIgnoreDesktopAnno" <ui:SettingsExpander Header="{i18n:I18n Key=AutoFold_App_SeewoBoard5}"
Header="希沃白板 (忽略桌面批注)" x:Name="ExpanderAutoFoldInEasiNote"
Icon="{x:Static ui:SegoeFluentIcons.Clear}" d:IsExpanded="True"
Toggled="ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled"/> Grid.Column="0" VerticalAlignment="Top">
<ui:SettingsExpander.HeaderIcon>
<ui:ImageIcon Source="/Resources/Icons-png/EasiNote.png"/>
</ui:SettingsExpander.HeaderIcon>
<ui:ToggleSwitch x:Name="CardAutoFoldInEasiNote"
OnContent="{DynamicResource Common_On}"
OffContent="{DynamicResource Common_Off}"
Toggled="ToggleSwitchAutoFoldInEasiNote_Toggled"/>
</ui:SettingsExpander>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiCamera" <controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiCamera"
Header="希沃视频展台" Header="{i18n:I18n Key=AutoFold_App_SeewoCamera}"
Icon="{x:Static ui:SegoeFluentIcons.Camera}" IconSource="/Resources/Icons-png/EasiCamera.png"
Toggled="ToggleSwitchAutoFoldInEasiCamera_Toggled"/> Toggled="ToggleSwitchAutoFoldInEasiCamera_Toggled"
Grid.Column="1" VerticalAlignment="Top"/>
</Grid>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3" <controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3"
Header="EasiNote3" Header="{i18n:I18n Key=AutoFold_App_SeewoBoard3}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/EasiNote3.png"
Toggled="ToggleSwitchAutoFoldInEasiNote3_Toggled"/> Toggled="ToggleSwitchAutoFoldInEasiNote3_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3C" <controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3C"
Header="EasiNote3C" Header="{i18n:I18n Key=AutoFold_App_SeewoLightBoard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/EasiNote3C.png"
Toggled="ToggleSwitchAutoFoldInEasiNote3C_Toggled"/> Toggled="ToggleSwitchAutoFoldInEasiNote3C_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote5C" <controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote5C"
Header="EasiNote5C" Header="{i18n:I18n Key=AutoFold_App_SeewoLightBoard5C}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/EasiNote5C.png"
Toggled="ToggleSwitchAutoFoldInEasiNote5C_Toggled"/> Toggled="ToggleSwitchAutoFoldInEasiNote5C_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInSeewoPincoTeacher" <controls:LabeledSettingsCard x:Name="CardAutoFoldInSeewoPincoTeacher"
Header="Seewo Pinco Teacher" Header="{i18n:I18n Key=AutoFold_App_SeewoPinco}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/SeewoPinco.png"
Toggled="ToggleSwitchAutoFoldInSeewoPincoTeacher_Toggled"/> Toggled="ToggleSwitchAutoFoldInSeewoPincoTeacher_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteTouchPro" <controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteTouchPro"
Header="鸿合 TouchPro" Header="{i18n:I18n Key=AutoFold_App_HiteBoard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/HiteBoard.png"
Toggled="ToggleSwitchAutoFoldInHiteTouchPro_Toggled"/> Toggled="ToggleSwitchAutoFoldInHiteTouchPro_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteLightBoard"
Header="鸿合 光能板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInHiteLightBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteCamera" <controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteCamera"
Header="鸿合 视频展台" Header="{i18n:I18n Key=AutoFold_App_HiteCamera}"
Icon="{x:Static ui:SegoeFluentIcons.Camera}" IconSource="/Resources/Icons-png/HiteCamera.png"
Toggled="ToggleSwitchAutoFoldInHiteCamera_Toggled"/> Toggled="ToggleSwitchAutoFoldInHiteCamera_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteLightBoard"
Header="{i18n:I18n Key=AutoFold_App_HiteLightBoard}"
IconSource="/Resources/Icons-png/HiteLightBoard.png"
Toggled="ToggleSwitchAutoFoldInHiteLightBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInWxBoardMain" <controls:LabeledSettingsCard x:Name="CardAutoFoldInWxBoardMain"
Header="小白板" Header="{i18n:I18n Key=AutoFold_App_WenXiangBoard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/WenXiang.png"
Toggled="ToggleSwitchAutoFoldInWxBoardMain_Toggled"/> Toggled="ToggleSwitchAutoFoldInWxBoardMain_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInOldZyBoard"
Header="中银白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInOldZyBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInMSWhiteboard" <controls:LabeledSettingsCard x:Name="CardAutoFoldInMSWhiteboard"
Header="Microsoft Whiteboard" Header="{i18n:I18n Key=AutoFold_App_MSWhiteboard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/Whiteboard.png"
Toggled="ToggleSwitchAutoFoldInMSWhiteboard_Toggled"/> Toggled="ToggleSwitchAutoFoldInMSWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxWhiteboard" <controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxWhiteboard"
Header="Admox 白板" Header="{i18n:I18n Key=AutoFold_App_AdmoxBoard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/AdmoxWhiteboard.png"
Toggled="ToggleSwitchAutoFoldInAdmoxWhiteboard_Toggled"/> Toggled="ToggleSwitchAutoFoldInAdmoxWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxBooth" <controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxBooth"
Header="Admox 展台" Header="{i18n:I18n Key=AutoFold_App_AdmoxBooth}"
Icon="{x:Static ui:SegoeFluentIcons.Camera}" IconSource="/Resources/Icons-png/AdmoxBooth.png"
Toggled="ToggleSwitchAutoFoldInAdmoxBooth_Toggled"/> Toggled="ToggleSwitchAutoFoldInAdmoxBooth_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInQPoint" <controls:LabeledSettingsCard x:Name="CardAutoFoldInQPoint"
Header="QPoint" Header="{i18n:I18n Key=AutoFold_App_YiYunBoard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/YiYunWhiteboard.png"
Toggled="ToggleSwitchAutoFoldInQPoint_Toggled"/> Toggled="ToggleSwitchAutoFoldInQPoint_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInYiYunVisualPresenter" <controls:LabeledSettingsCard x:Name="CardAutoFoldInYiYunVisualPresenter"
Header="易云展台" Header="{i18n:I18n Key=AutoFold_App_YiYunBooth}"
Icon="{x:Static ui:SegoeFluentIcons.Camera}" IconSource="/Resources/Icons-png/YiYunVisualPresenter.png"
Toggled="ToggleSwitchAutoFoldInYiYunVisualPresenter_Toggled"/> Toggled="ToggleSwitchAutoFoldInYiYunVisualPresenter_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInMaxHubWhiteboard" <controls:LabeledSettingsCard x:Name="CardAutoFoldInMaxHubWhiteboard"
Header="MaxHub 白板" Header="{i18n:I18n Key=AutoFold_App_MaxHubBoard}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/MaxHubWhiteboard.png"
Toggled="ToggleSwitchAutoFoldInMaxHubWhiteboard_Toggled"/> Toggled="ToggleSwitchAutoFoldInMaxHubWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInOldZyBoard"
Header="{i18n:I18n Key=AutoFold_OldZyBoard}"
IconSource="/Resources/Icons-png/Donview.png"
Toggled="ToggleSwitchAutoFoldInOldZyBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInPPTSlideShow" <controls:LabeledSettingsCard x:Name="CardAutoFoldInPPTSlideShow"
Header="PPT 放映" Header="{i18n:I18n Key=Automation_AutoFoldInPPT}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/PPTTools.png"
Toggled="ToggleSwitchAutoFoldInPPTSlideShow_Toggled"/> Toggled="ToggleSwitchAutoFoldInPPTSlideShow_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoKill_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/> <TextBlock Text="{i18n:I18n Key=AutoKill_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillPptService" <controls:LabeledSettingsCard x:Name="CardAutoKillPptService"
Header="PPT 服务" Header="{i18n:I18n Key=AutoKill_PptTools}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" Description="{i18n:I18n Key=AutoKill_PptToolsHint}"
IconSource="/Resources/Icons-png/PPTTools.png"
Toggled="ToggleSwitchAutoKillPptService_Toggled"/> Toggled="ToggleSwitchAutoKillPptService_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillEasiNote" <controls:LabeledSettingsCard x:Name="CardAutoKillEasiNote"
Header="希沃白板" Header="{i18n:I18n Key=AutoKill_EasiNote5}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/EasiNote.png"
Toggled="ToggleSwitchAutoKillEasiNote_Toggled"/> Toggled="ToggleSwitchAutoKillEasiNote_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillHiteAnnotation" <controls:LabeledSettingsCard x:Name="CardAutoKillHiteAnnotation"
Header="鸿合批注" Header="{i18n:I18n Key=AutoKill_HiteAnnotation}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" IconSource="/Resources/Icons-png/HiteAnnotation.png"
Toggled="ToggleSwitchAutoKillHiteAnnotation_Toggled"/> Toggled="ToggleSwitchAutoKillHiteAnnotation_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillVComYouJiao" <controls:LabeledSettingsCard x:Name="CardAutoKillVComYouJiao"
Header="VCom 幼教" Header="{i18n:I18n Key=AutoKill_YouJiao}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillVComYouJiao_Toggled"/> Toggled="ToggleSwitchAutoKillVComYouJiao_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillSeewoLauncher2DesktopAnnotation" <controls:LabeledSettingsCard x:Name="CardAutoKillSeewoLauncher2DesktopAnnotation"
Header="希沃桌面批注" Header="{i18n:I18n Key=AutoKill_SeewoDesktop2Anno}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" Description="{i18n:I18n Key=AutoKill_SeewoDesktop2AnnoHint}"
IconSource="/Resources/Icons-png/Seewo2Annotation.png"
Toggled="ToggleSwitchAutoKillSeewoLauncher2DesktopAnnotation_Toggled"/> Toggled="ToggleSwitchAutoKillSeewoLauncher2DesktopAnnotation_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillInkCanvas" <controls:LabeledSettingsCard x:Name="CardAutoKillInkCanvas"
Header="InkCanvas" Header="{i18n:I18n Key=AutoKill_InkCanvasIC}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillInkCanvas_Toggled"/> Toggled="ToggleSwitchAutoKillInkCanvas_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillICA" <controls:LabeledSettingsCard x:Name="CardAutoKillICA"
Header="ICA" Header="{i18n:I18n Key=AutoKill_ICA}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillICA_Toggled"/> Toggled="ToggleSwitchAutoKillICA_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillIDT" <controls:LabeledSettingsCard x:Name="CardAutoKillIDT"
Header="IDT" Header="{i18n:I18n Key=AutoKill_Inkeys}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}" Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillIDT_Toggled"/> Toggled="ToggleSwitchAutoKillIDT_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationAfterKillHite" <controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationAfterKillHite"
Header="杀进程后进入批注模式" Header="{i18n:I18n Key=AutoKill_HiteAfterKillEnterAnnotation}"
Icon="{x:Static ui:SegoeFluentIcons.Edit}" IconSource="/Resources/Icons-png/HiteAnnotation.png"
Toggled="ToggleSwitchAutoEnterAnnotationAfterKillHite_Toggled"/> Toggled="ToggleSwitchAutoEnterAnnotationAfterKillHite_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoFold_Mode}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/> <TextBlock Text="{i18n:I18n Key=AutoFold_Mode}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationModeWhenExitFoldMode" <controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationModeWhenExitFoldMode"
Header="退出收纳时进入批注模式" Header="{i18n:I18n Key=FoldMode_AutoFoldAfterWhiteboard}"
Icon="{x:Static ui:SegoeFluentIcons.Edit}" Icon="{x:Static ui:SegoeFluentIcons.Edit}"
Toggled="ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode_Toggled"/> Toggled="ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldWhenExitWhiteboard" <controls:LabeledSettingsCard x:Name="CardAutoFoldWhenExitWhiteboard"
Header="退出白板时自动收纳" Header="{i18n:I18n Key=FoldMode_AutoFoldAfterWhiteboard}"
Icon="{x:Static ui:SegoeFluentIcons.Back}" Icon="{x:Static ui:SegoeFluentIcons.Back}"
Toggled="ToggleSwitchAutoFoldWhenExitWhiteboard_Toggled"/> Toggled="ToggleSwitchAutoFoldWhenExitWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldAfterPPTSlideShow" <controls:LabeledSettingsCard x:Name="CardAutoFoldAfterPPTSlideShow"
Header="PPT 放映结束后自动收纳" Header="{i18n:I18n Key=FoldMode_AutoFoldAfterPPT}"
Icon="{x:Static ui:SegoeFluentIcons.Back}" Description="{i18n:I18n Key=FoldMode_AutoFoldAfterPPTHint}"
IconSource="/Resources/Icons-png/PPTTools.png"
Toggled="ToggleSwitchAutoFoldAfterPPTSlideShow_Toggled"/> Toggled="ToggleSwitchAutoFoldAfterPPTSlideShow_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardKeepFoldAfterSoftwareExit" <controls:LabeledSettingsCard x:Name="CardKeepFoldAfterSoftwareExit"
Header="软件退出后保持收纳" Header="{i18n:I18n Key=Automation_KeepFoldAfterExit}"
Description="{i18n:I18n Key=Automation_KeepFoldAfterExitHint}"
Icon="{x:Static ui:SegoeFluentIcons.Pin}" Icon="{x:Static ui:SegoeFluentIcons.Pin}"
Toggled="ToggleSwitchKeepFoldAfterSoftwareExit_Toggled"/> Toggled="ToggleSwitchKeepFoldAfterSoftwareExit_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoSave_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/> <TextBlock Text="{i18n:I18n Key=AutoSave_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardSaveScreenshotsInDateFolders" <controls:LabeledSettingsCard x:Name="CardSaveScreenshotsInDateFolders"
Header="截图按日期分文件夹" Header="{i18n:I18n Key=Storage_AutoSaveInkOnScreenshot}"
Icon="{x:Static ui:SegoeFluentIcons.Folder}" Icon="{x:Static ui:SegoeFluentIcons.Folder}"
Toggled="ToggleSwitchSaveScreenshotsInDateFolders_Toggled"/> Toggled="ToggleSwitchSaveScreenshotsInDateFolders_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtScreenshot" <controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtScreenshot"
Header="截图时自动保存墨迹" Header="{i18n:I18n Key=Storage_AutoSaveInkOnScreenshot}"
Icon="{x:Static ui:SegoeFluentIcons.Save}" Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/> Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/>
@@ -218,21 +235,22 @@
Toggled="ToggleSwitchSaveStrokesAsXML_Toggled"/> Toggled="ToggleSwitchSaveStrokesAsXML_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardEnableAutoSaveStrokes" <controls:LabeledSettingsCard x:Name="CardEnableAutoSaveStrokes"
Header="定时自动保存墨迹" Header="{i18n:I18n Key=Storage_AutoSaveInk}"
Description="{i18n:I18n Key=Storage_AutoSaveHint}"
Icon="{x:Static ui:SegoeFluentIcons.Save}" Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchEnableAutoSaveStrokes_Toggled"/> Toggled="ToggleSwitchEnableAutoSaveStrokes_Toggled"/>
<ui:SettingsCard Header="自动保存间隔"> <ui:SettingsCard Header="{i18n:I18n Key=Storage_AutoSaveInterval}">
<ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.QuietHours}"/> <ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.QuietHours}"/>
</ui:SettingsCard.HeaderIcon> </ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxAutoSaveStrokesInterval" <ComboBox x:Name="ComboBoxAutoSaveStrokesInterval"
SelectionChanged="ComboBoxAutoSaveStrokesInterval_SelectionChanged"> SelectionChanged="ComboBoxAutoSaveStrokesInterval_SelectionChanged">
<ComboBoxItem Content="1 分钟" Tag="1"/> <ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_1Min}" Tag="1"/>
<ComboBoxItem Content="3 分钟" Tag="3"/> <ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_3Min}" Tag="3"/>
<ComboBoxItem Content="5 分钟" Tag="5"/> <ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_5Min}" Tag="5"/>
<ComboBoxItem Content="10 分钟" Tag="10"/> <ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_10Min}" Tag="10"/>
<ComboBoxItem Content="30 分钟" Tag="30"/> <ComboBoxItem Content="{i18n:I18n Key=Storage_AutoSaveInterval_30Min}" Tag="30"/>
</ComboBox> </ComboBox>
</ui:SettingsCard> </ui:SettingsCard>
@@ -282,27 +300,27 @@
</ui:SettingsExpander.HeaderIcon> </ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items> <ui:SettingsExpander.Items>
<ui:SettingsCard Header="希沃白板 3"> <ui:SettingsCard Header="希沃白板 3">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/EasiNote3.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard3Floating" Toggled="ToggleSwitchSeewoWhiteboard3Floating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard3Floating" Toggled="ToggleSwitchSeewoWhiteboard3Floating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃白板 5"> <ui:SettingsCard Header="希沃白板 5">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/EasiNote.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5Floating" Toggled="ToggleSwitchSeewoWhiteboard5Floating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5Floating" Toggled="ToggleSwitchSeewoWhiteboard5Floating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃白板 5C"> <ui:SettingsCard Header="希沃白板 5C">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/EasiNote5C.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5CFloating" Toggled="ToggleSwitchSeewoWhiteboard5CFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5CFloating" Toggled="ToggleSwitchSeewoWhiteboard5CFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃品课侧栏"> <ui:SettingsCard Header="希沃品课侧栏">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/SeewoPinco.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPincoSideBarFloating" Toggled="ToggleSwitchSeewoPincoSideBarFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoPincoSideBarFloating" Toggled="ToggleSwitchSeewoPincoSideBarFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃品课画笔"> <ui:SettingsCard Header="希沃品课画笔">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/SeewoPinco.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPincoDrawingFloating" Toggled="ToggleSwitchSeewoPincoDrawingFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoPincoDrawingFloating" Toggled="ToggleSwitchSeewoPincoDrawingFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃PPT小工具"> <ui:SettingsCard Header="希沃PPT小工具">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/PPTTools.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPPTFloating" Toggled="ToggleSwitchSeewoPPTFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoPPTFloating" Toggled="ToggleSwitchSeewoPPTFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="AiClass"> <ui:SettingsCard Header="AiClass">
@@ -310,7 +328,7 @@
<controls:LabeledSettingsCard x:Name="CardAiClassFloating" Toggled="ToggleSwitchAiClassFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardAiClassFloating" Toggled="ToggleSwitchAiClassFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="鸿合屏幕书写"> <ui:SettingsCard Header="鸿合屏幕书写">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/HiteAnnotation.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardHiteAnnotationFloating" Toggled="ToggleSwitchHiteAnnotationFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardHiteAnnotationFloating" Toggled="ToggleSwitchHiteAnnotationFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="畅言智慧课堂"> <ui:SettingsCard Header="畅言智慧课堂">
@@ -318,7 +336,7 @@
<controls:LabeledSettingsCard x:Name="CardChangYanFloating" Toggled="ToggleSwitchChangYanFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardChangYanFloating" Toggled="ToggleSwitchChangYanFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="畅言PPT"> <ui:SettingsCard Header="畅言PPT">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/PPTTools.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardChangYanPptFloating" Toggled="ToggleSwitchChangYanPptFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardChangYanPptFloating" Toggled="ToggleSwitchChangYanPptFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="天喻教育云"> <ui:SettingsCard Header="天喻教育云">
@@ -326,11 +344,11 @@
<controls:LabeledSettingsCard x:Name="CardIntelligentClassFloating" Toggled="ToggleSwitchIntelligentClassFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardIntelligentClassFloating" Toggled="ToggleSwitchIntelligentClassFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃桌面画笔"> <ui:SettingsCard Header="希沃桌面画笔">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/Seewo2Annotation.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoDesktopAnnotationFloating" Toggled="ToggleSwitchSeewoDesktopAnnotationFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoDesktopAnnotationFloating" Toggled="ToggleSwitchSeewoDesktopAnnotationFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="希沃桌面侧栏"> <ui:SettingsCard Header="希沃桌面侧栏">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon><ui:ImageIcon Source="/Resources/Icons-png/Seewo2Annotation.png"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoDesktopSideBarFloating" Toggled="ToggleSwitchSeewoDesktopSideBarFloating_Toggled"/> <controls:LabeledSettingsCard x:Name="CardSeewoDesktopSideBarFloating" Toggled="ToggleSwitchSeewoDesktopSideBarFloating_Toggled"/>
</ui:SettingsCard> </ui:SettingsCard>
</ui:SettingsExpander.Items> </ui:SettingsExpander.Items>
@@ -37,7 +37,7 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
var auto = SettingsManager.Settings.Automation; var auto = SettingsManager.Settings.Automation;
CardAutoFoldInEasiNote.IsOn = auto.IsAutoFoldInEasiNote; CardAutoFoldInEasiNote.IsOn = auto.IsAutoFoldInEasiNote;
CardAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn = auto.IsAutoFoldInEasiNoteIgnoreDesktopAnno; ExpanderAutoFoldInEasiNote.IsExpanded = auto.IsAutoFoldInEasiNote;
CardAutoFoldInEasiCamera.IsOn = auto.IsAutoFoldInEasiCamera; CardAutoFoldInEasiCamera.IsOn = auto.IsAutoFoldInEasiCamera;
CardAutoFoldInEasiNote3.IsOn = auto.IsAutoFoldInEasiNote3; CardAutoFoldInEasiNote3.IsOn = auto.IsAutoFoldInEasiNote3;
CardAutoFoldInEasiNote3C.IsOn = auto.IsAutoFoldInEasiNote3C; CardAutoFoldInEasiNote3C.IsOn = auto.IsAutoFoldInEasiNote3C;
@@ -123,17 +123,11 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNote = CardAutoFoldInEasiNote.IsOn; SettingsManager.Settings.Automation.IsAutoFoldInEasiNote = CardAutoFoldInEasiNote.IsOn;
ExpanderAutoFoldInEasiNote.IsExpanded = CardAutoFoldInEasiNote.IsOn;
SettingsManager.SaveSettingsToFile(); SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold(); GetMainWindow()?.StartOrStoptimerCheckAutoFold();
} }
private void ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = CardAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoFoldInEasiCamera_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitchAutoFoldInEasiCamera_Toggled(object sender, RoutedEventArgs e)
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
+46 -13
View File
@@ -1,5 +1,6 @@
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media;
using iNKORE.UI.WPF.Modern.Common.IconKeys; using iNKORE.UI.WPF.Modern.Common.IconKeys;
namespace Ink_Canvas.Controls namespace Ink_Canvas.Controls
@@ -37,13 +38,23 @@ namespace Ink_Canvas.Controls
private static void OnIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) private static void OnIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{ {
if (d is LabeledSettingsCard control && control.SettingsCard != null) if (d is LabeledSettingsCard control)
{ control.ApplyIcon();
var iconData = (FontIconData?)e.NewValue; }
control.SettingsCard.HeaderIcon = iconData.HasValue
? new iNKORE.UI.WPF.Modern.Controls.FontIcon(iconData.Value) public static readonly DependencyProperty IconSourceProperty = DependencyProperty.Register(
: null; nameof(IconSource), typeof(ImageSource), typeof(LabeledSettingsCard), new PropertyMetadata(null, OnIconSourceChanged));
}
public ImageSource IconSource
{
get => (ImageSource)GetValue(IconSourceProperty);
set => SetValue(IconSourceProperty, value);
}
private static void OnIconSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is LabeledSettingsCard control)
control.ApplyIcon();
} }
public static readonly DependencyProperty HeaderIconProperty = DependencyProperty.Register( public static readonly DependencyProperty HeaderIconProperty = DependencyProperty.Register(
@@ -57,9 +68,34 @@ namespace Ink_Canvas.Controls
private static void OnHeaderIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) private static void OnHeaderIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{ {
if (d is LabeledSettingsCard control && control.SettingsCard != null) if (d is LabeledSettingsCard control)
control.ApplyIcon();
}
private void ApplyIcon()
{
if (SettingsCard == null) return;
if (IconSource != null)
{ {
control.SettingsCard.HeaderIcon = e.NewValue; SettingsCard.HeaderIcon = new Image
{
Source = IconSource,
Width = 16,
Height = 16,
};
}
else if (Icon.HasValue)
{
SettingsCard.HeaderIcon = new iNKORE.UI.WPF.Modern.Controls.FontIcon(Icon.Value);
}
else if (HeaderIcon != null)
{
SettingsCard.HeaderIcon = HeaderIcon;
}
else
{
SettingsCard.HeaderIcon = null;
} }
} }
@@ -114,10 +150,7 @@ namespace Ink_Canvas.Controls
{ {
if (!string.IsNullOrEmpty(SwitchName) && ToggleSwitch != null) if (!string.IsNullOrEmpty(SwitchName) && ToggleSwitch != null)
ToggleSwitch.Name = SwitchName; ToggleSwitch.Name = SwitchName;
if (Icon.HasValue && SettingsCard != null) ApplyIcon();
SettingsCard.HeaderIcon = new iNKORE.UI.WPF.Modern.Controls.FontIcon(Icon.Value);
else if (HeaderIcon != null && SettingsCard != null)
SettingsCard.HeaderIcon = HeaderIcon;
} }
private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)