diff --git a/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml
index a8894441..76ba4356 100644
--- a/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml
+++ b/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml
@@ -65,7 +65,7 @@
+ IsExpanded="True">
@@ -92,29 +92,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml.cs
index 3e7d2850..1efa6da5 100644
--- a/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml.cs
+++ b/Ink Canvas/Windows/SettingsViews/Pages/AboutPage.xaml.cs
@@ -1,12 +1,9 @@
using Ink_Canvas.Helpers;
-using Ink_Canvas.Windows.SettingsViews.Helpers;
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
-using System.IO;
using System.Reflection;
using System.Windows;
-using System.Windows.Controls;
using System.Windows.Threading;
namespace Ink_Canvas.Windows.SettingsViews.Pages
@@ -20,9 +17,6 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
public partial class AboutPage : iNKORE.UI.WPF.Modern.Controls.Page
{
- private bool _isLoaded = false;
- private bool _isChangingTelemetryInternally;
- private bool _isChangingTelemetryPrivacyInternally;
private DispatcherTimer _usageRefreshTimer;
private long _savedTotalSeconds;
private DateTime _sessionStartTime;
@@ -69,7 +63,6 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
private void AboutPage_Loaded(object sender, RoutedEventArgs e)
{
LoadSettings();
- _isLoaded = true;
if (_usageRefreshTimer == null)
{
@@ -101,43 +94,15 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
private void LoadSettings()
{
- _isLoaded = false;
-
try
{
AppVersionTextBlock.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString();
-
- var settings = SettingsManager.Settings;
- if (settings?.Startup != null)
- {
- int idx = 0;
- switch (settings.Startup.TelemetryUploadLevel)
- {
- case TelemetryUploadLevel.None:
- idx = 0;
- break;
- case TelemetryUploadLevel.Basic:
- idx = 1;
- break;
- case TelemetryUploadLevel.Extended:
- idx = 2;
- break;
- default:
- idx = 0;
- break;
- }
- ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
- CheckBoxTelemetryPrivacyAccepted.IsChecked = settings.Startup.HasAcceptedTelemetryPrivacy;
- }
-
RefreshDeviceInfo();
}
catch (Exception ex)
{
Debug.WriteLine($"加载关于页面设置时出错: {ex.Message}");
}
-
- _isLoaded = true;
}
private void RefreshDeviceInfo_Click(object sender, RoutedEventArgs e)
@@ -206,219 +171,5 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
TotalUsageTextBlock.Text = "获取失败";
}
}
-
- private void ComboBoxTelemetryUploadLevel_SelectionChanged(object sender, RoutedEventArgs e)
- {
- if (!_isLoaded) return;
- if (_isChangingTelemetryInternally) return;
- var oldLevel = SettingsManager.Settings.Startup.TelemetryUploadLevel;
- var item = ComboBoxTelemetryUploadLevel?.SelectedItem as ComboBoxItem;
- if (item == null) return;
-
- var tag = item.Tag?.ToString() ?? "0";
- var newLevel = TelemetryUploadLevel.None;
- switch (tag)
- {
- case "1":
- newLevel = TelemetryUploadLevel.Basic;
- break;
- case "2":
- newLevel = TelemetryUploadLevel.Extended;
- break;
- default:
- newLevel = TelemetryUploadLevel.None;
- break;
- }
-
- if (newLevel == TelemetryUploadLevel.None &&
- oldLevel != TelemetryUploadLevel.None &&
- SettingsManager.Settings.Startup.UpdateChannel != UpdateChannel.Release)
- {
- var result = MessageBox.Show(
- "关闭匿名使用数据上传后,将无法继续使用预览/测试通道,系统会自动切换回正式通道(Release)。\n\n是否确认关闭?",
- "确认关闭遥测",
- MessageBoxButton.YesNo,
- MessageBoxImage.Warning);
-
- if (result != MessageBoxResult.Yes)
- {
- _isChangingTelemetryInternally = true;
- try
- {
- int idx = 0;
- switch (oldLevel)
- {
- case TelemetryUploadLevel.Basic:
- idx = 1;
- break;
- case TelemetryUploadLevel.Extended:
- idx = 2;
- break;
- default:
- idx = 0;
- break;
- }
- ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
- }
- finally
- {
- _isChangingTelemetryInternally = false;
- }
- return;
- }
-
- SettingsManager.Settings.Startup.UpdateChannel = UpdateChannel.Release;
- DeviceIdentifier.UpdateUsageChannel(UpdateChannel.Release);
- }
-
- if (newLevel != TelemetryUploadLevel.None && !SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy)
- {
- MessageBox.Show(
- "在开启匿名使用数据上传前,请先阅读并勾选上方的隐私说明。",
- "需要同意隐私说明",
- MessageBoxButton.OK,
- MessageBoxImage.Warning);
-
- _isChangingTelemetryInternally = true;
- try
- {
- SettingsManager.Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.None;
- if (ComboBoxTelemetryUploadLevel != null)
- {
- ComboBoxTelemetryUploadLevel.SelectedIndex = 0;
- }
- }
- finally
- {
- _isChangingTelemetryInternally = false;
- }
-
- return;
- }
-
- SettingsManager.Settings.Startup.TelemetryUploadLevel = newLevel;
- SettingsManager.SaveSettingsToFile();
- }
-
- private void CheckBoxTelemetryPrivacyAccepted_Checked(object sender, RoutedEventArgs e)
- {
- if (!_isLoaded) return;
- if (_isChangingTelemetryPrivacyInternally) return;
-
- bool isChecked = CheckBoxTelemetryPrivacyAccepted.IsChecked == true;
-
- if (isChecked)
- {
- if (!PrivacyFileExists())
- {
- MessageBox.Show(
- "未找到隐私说明文件(privacy / privacy.txt),暂时无法启用匿名使用数据上传。",
- "隐私说明缺失",
- MessageBoxButton.OK,
- MessageBoxImage.Warning);
-
- _isChangingTelemetryPrivacyInternally = true;
- try
- {
- CheckBoxTelemetryPrivacyAccepted.IsChecked = false;
- }
- finally
- {
- _isChangingTelemetryPrivacyInternally = false;
- }
-
- SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = false;
- SettingsManager.SaveSettingsToFile();
- return;
- }
-
- var privacyWindow = new PrivacyAgreementWindow();
- bool? dialogResult = privacyWindow.ShowDialog();
-
- if (dialogResult == true && privacyWindow.UserAccepted)
- {
- SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = true;
- SettingsManager.SaveSettingsToFile();
- }
- else
- {
- _isChangingTelemetryPrivacyInternally = true;
- try
- {
- CheckBoxTelemetryPrivacyAccepted.IsChecked = false;
- }
- finally
- {
- _isChangingTelemetryPrivacyInternally = false;
- }
-
- SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = false;
- SettingsManager.SaveSettingsToFile();
- }
- }
- else
- {
- var result = MessageBox.Show(
- "取消同意隐私说明后,将关闭匿名使用数据上传,并切回正式通道(Release)。\n\n是否确认?",
- "确认取消隐私同意",
- MessageBoxButton.YesNo,
- MessageBoxImage.Warning);
-
- if (result != MessageBoxResult.Yes)
- {
- _isChangingTelemetryPrivacyInternally = true;
- try
- {
- CheckBoxTelemetryPrivacyAccepted.IsChecked = true;
- }
- finally
- {
- _isChangingTelemetryPrivacyInternally = false;
- }
- return;
- }
-
- _isChangingTelemetryInternally = true;
- try
- {
- SettingsManager.Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.None;
- if (ComboBoxTelemetryUploadLevel != null)
- {
- ComboBoxTelemetryUploadLevel.SelectedIndex = 0;
- }
- }
- finally
- {
- _isChangingTelemetryInternally = false;
- }
-
- if (SettingsManager.Settings.Startup.UpdateChannel != UpdateChannel.Release)
- {
- SettingsManager.Settings.Startup.UpdateChannel = UpdateChannel.Release;
- DeviceIdentifier.UpdateUsageChannel(UpdateChannel.Release);
- }
-
- SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = false;
- SettingsManager.SaveSettingsToFile();
- }
- }
-
- private static bool PrivacyFileExists()
- {
- try
- {
- var assembly = Assembly.GetExecutingAssembly();
- var resourceName = "Ink_Canvas.privacy.txt";
- using (Stream stream = assembly.GetManifestResourceStream(resourceName))
- {
- return stream != null;
- }
- }
- catch
- {
- return false;
- }
- }
-
}
}
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml
index b4c32ed4..ba9eb663 100644
--- a/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml
+++ b/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml
@@ -174,8 +174,8 @@
+ IsExpanded="{Binding IsOn, ElementName=CardBrushAutoRestore, Mode=OneWay}"
+ d:Visibility="Visible">
@@ -283,8 +283,8 @@
+ IsExpanded="{Binding IsOn, ElementName=CardEnableInkToShape, Mode=OneWay}"
+ d:Visibility="Visible">
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/IconographyPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/IconographyPage.xaml
index e5d3d698..98d04f78 100644
--- a/Ink Canvas/Windows/SettingsViews/Pages/IconographyPage.xaml
+++ b/Ink Canvas/Windows/SettingsViews/Pages/IconographyPage.xaml
@@ -15,7 +15,7 @@
+ IsExpanded="True">
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/MainInterfacePage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/MainInterfacePage.xaml
new file mode 100644
index 00000000..a701a599
--- /dev/null
+++ b/Ink Canvas/Windows/SettingsViews/Pages/MainInterfacePage.xaml
@@ -0,0 +1,58 @@
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/MainInterfacePage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/MainInterfacePage.xaml.cs
new file mode 100644
index 00000000..ad450b68
--- /dev/null
+++ b/Ink Canvas/Windows/SettingsViews/Pages/MainInterfacePage.xaml.cs
@@ -0,0 +1,88 @@
+using iNKORE.UI.WPF.Modern.Controls;
+using System.Collections.ObjectModel;
+using System.Windows;
+using SWC = System.Windows.Controls;
+
+namespace Ink_Canvas.Windows.SettingsViews.Pages
+{
+ public partial class MainInterfacePage : SWC.Page
+ {
+ private readonly ObservableCollection _subPageItems = new();
+
+ public MainInterfacePage()
+ {
+ InitializeComponent();
+ SubPageItems.ItemsSource = _subPageItems;
+ Loaded += MainInterfacePage_Loaded;
+ }
+
+ private void MainInterfacePage_Loaded(object sender, RoutedEventArgs e)
+ {
+ LoadSubPages();
+ }
+
+ private void LoadSubPages()
+ {
+ _subPageItems.Clear();
+
+ var settingsWindow = Window.GetWindow(this) as SettingsWindow;
+ if (settingsWindow == null) return;
+
+ var navView = settingsWindow.GetNavigationView();
+ if (navView == null) return;
+
+ foreach (var item in navView.MenuItems)
+ {
+ if (item is NavigationViewItem navItem)
+ {
+ string tag = navItem.Tag as string;
+ if (tag == "MainInterfacePage" && navItem.MenuItems.Count > 0)
+ {
+ foreach (var child in navItem.MenuItems)
+ {
+ if (child is NavigationViewItem childItem)
+ {
+ string childTag = childItem.Tag as string;
+ if (!string.IsNullOrEmpty(childTag))
+ {
+ string glyph = ExtractIconGlyph(childItem);
+ string description = SWC.ToolTipService.GetToolTip(childItem) as string
+ ?? $"点击跳转到{childItem.Content}";
+
+ _subPageItems.Add(new SubPageNavItem
+ {
+ Header = childItem.Content?.ToString() ?? "",
+ Description = description,
+ PageTag = childTag,
+ IconGlyph = glyph
+ });
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ private string ExtractIconGlyph(NavigationViewItem navItem)
+ {
+ if (navItem.Icon is FontIcon fontIcon)
+ return fontIcon.Glyph ?? "\uE737";
+
+ if (navItem.Icon is SymbolIcon symbolIcon)
+ return char.ConvertFromUtf32((int)symbolIcon.Symbol);
+
+ return "\uE737";
+ }
+
+ private void SubPageCard_Click(object sender, RoutedEventArgs e)
+ {
+ if (sender is FrameworkElement element && element.Tag is string pageTag)
+ {
+ var settingsWindow = Window.GetWindow(this) as SettingsWindow;
+ settingsWindow?.NavigateToPage(pageTag);
+ }
+ }
+ }
+}
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PrivacyPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/PrivacyPage.xaml
new file mode 100644
index 00000000..7f422dd3
--- /dev/null
+++ b/Ink Canvas/Windows/SettingsViews/Pages/PrivacyPage.xaml
@@ -0,0 +1,64 @@
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PrivacyPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/PrivacyPage.xaml.cs
new file mode 100644
index 00000000..b0934c99
--- /dev/null
+++ b/Ink Canvas/Windows/SettingsViews/Pages/PrivacyPage.xaml.cs
@@ -0,0 +1,279 @@
+using Ink_Canvas.Helpers;
+using Ink_Canvas.Windows.SettingsViews.Helpers;
+using System;
+using System.IO;
+using System.Reflection;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Ink_Canvas.Windows.SettingsViews.Pages
+{
+ public partial class PrivacyPage : iNKORE.UI.WPF.Modern.Controls.Page
+ {
+ private bool _isLoaded = false;
+ private bool _isChangingTelemetryInternally;
+ private bool _isChangingTelemetryPrivacyInternally;
+
+ public PrivacyPage()
+ {
+ InitializeComponent();
+ Loaded += PrivacyPage_Loaded;
+ }
+
+ private void PrivacyPage_Loaded(object sender, RoutedEventArgs e)
+ {
+ LoadSettings();
+ _isLoaded = true;
+ }
+
+ private void LoadSettings()
+ {
+ _isLoaded = false;
+
+ try
+ {
+ var settings = SettingsManager.Settings;
+ if (settings?.Startup != null)
+ {
+ int idx = 0;
+ switch (settings.Startup.TelemetryUploadLevel)
+ {
+ case TelemetryUploadLevel.None:
+ idx = 0;
+ break;
+ case TelemetryUploadLevel.Basic:
+ idx = 1;
+ break;
+ case TelemetryUploadLevel.Extended:
+ idx = 2;
+ break;
+ default:
+ idx = 0;
+ break;
+ }
+ ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
+ CheckBoxTelemetryPrivacyAccepted.IsChecked = settings.Startup.HasAcceptedTelemetryPrivacy;
+ }
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"加载隐私页面设置时出错: {ex.Message}");
+ }
+
+ _isLoaded = true;
+ }
+
+ private void ComboBoxTelemetryUploadLevel_SelectionChanged(object sender, RoutedEventArgs e)
+ {
+ if (!_isLoaded) return;
+ if (_isChangingTelemetryInternally) return;
+ var oldLevel = SettingsManager.Settings.Startup.TelemetryUploadLevel;
+ var item = ComboBoxTelemetryUploadLevel?.SelectedItem as ComboBoxItem;
+ if (item == null) return;
+
+ var tag = item.Tag?.ToString() ?? "0";
+ var newLevel = TelemetryUploadLevel.None;
+ switch (tag)
+ {
+ case "1":
+ newLevel = TelemetryUploadLevel.Basic;
+ break;
+ case "2":
+ newLevel = TelemetryUploadLevel.Extended;
+ break;
+ default:
+ newLevel = TelemetryUploadLevel.None;
+ break;
+ }
+
+ if (newLevel == TelemetryUploadLevel.None &&
+ oldLevel != TelemetryUploadLevel.None &&
+ SettingsManager.Settings.Startup.UpdateChannel != UpdateChannel.Release)
+ {
+ var result = MessageBox.Show(
+ "关闭匿名使用数据上传后,将无法继续使用预览/测试通道,系统会自动切换回正式通道(Release)。\n\n是否确认关闭?",
+ "确认关闭遥测",
+ MessageBoxButton.YesNo,
+ MessageBoxImage.Warning);
+
+ if (result != MessageBoxResult.Yes)
+ {
+ _isChangingTelemetryInternally = true;
+ try
+ {
+ int idx = 0;
+ switch (oldLevel)
+ {
+ case TelemetryUploadLevel.Basic:
+ idx = 1;
+ break;
+ case TelemetryUploadLevel.Extended:
+ idx = 2;
+ break;
+ default:
+ idx = 0;
+ break;
+ }
+ ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
+ }
+ finally
+ {
+ _isChangingTelemetryInternally = false;
+ }
+ return;
+ }
+
+ SettingsManager.Settings.Startup.UpdateChannel = UpdateChannel.Release;
+ DeviceIdentifier.UpdateUsageChannel(UpdateChannel.Release);
+ }
+
+ if (newLevel != TelemetryUploadLevel.None && !SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy)
+ {
+ MessageBox.Show(
+ "在开启匿名使用数据上传前,请先阅读并勾选上方的隐私说明。",
+ "需要同意隐私说明",
+ MessageBoxButton.OK,
+ MessageBoxImage.Warning);
+
+ _isChangingTelemetryInternally = true;
+ try
+ {
+ SettingsManager.Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.None;
+ if (ComboBoxTelemetryUploadLevel != null)
+ {
+ ComboBoxTelemetryUploadLevel.SelectedIndex = 0;
+ }
+ }
+ finally
+ {
+ _isChangingTelemetryInternally = false;
+ }
+
+ return;
+ }
+
+ SettingsManager.Settings.Startup.TelemetryUploadLevel = newLevel;
+ SettingsManager.SaveSettingsToFile();
+ }
+
+ private void CheckBoxTelemetryPrivacyAccepted_Checked(object sender, RoutedEventArgs e)
+ {
+ if (!_isLoaded) return;
+ if (_isChangingTelemetryPrivacyInternally) return;
+
+ bool isChecked = CheckBoxTelemetryPrivacyAccepted.IsChecked == true;
+
+ if (isChecked)
+ {
+ if (!PrivacyFileExists())
+ {
+ MessageBox.Show(
+ "未找到隐私说明文件(privacy / privacy.txt),暂时无法启用匿名使用数据上传。",
+ "隐私说明缺失",
+ MessageBoxButton.OK,
+ MessageBoxImage.Warning);
+
+ _isChangingTelemetryPrivacyInternally = true;
+ try
+ {
+ CheckBoxTelemetryPrivacyAccepted.IsChecked = false;
+ }
+ finally
+ {
+ _isChangingTelemetryPrivacyInternally = false;
+ }
+
+ SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = false;
+ SettingsManager.SaveSettingsToFile();
+ return;
+ }
+
+ var privacyWindow = new PrivacyAgreementWindow();
+ bool? dialogResult = privacyWindow.ShowDialog();
+
+ if (dialogResult == true && privacyWindow.UserAccepted)
+ {
+ SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = true;
+ SettingsManager.SaveSettingsToFile();
+ }
+ else
+ {
+ _isChangingTelemetryPrivacyInternally = true;
+ try
+ {
+ CheckBoxTelemetryPrivacyAccepted.IsChecked = false;
+ }
+ finally
+ {
+ _isChangingTelemetryPrivacyInternally = false;
+ }
+
+ SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = false;
+ SettingsManager.SaveSettingsToFile();
+ }
+ }
+ else
+ {
+ var result = MessageBox.Show(
+ "取消同意隐私说明后,将关闭匿名使用数据上传,并切回正式通道(Release)。\n\n是否确认?",
+ "确认取消隐私同意",
+ MessageBoxButton.YesNo,
+ MessageBoxImage.Warning);
+
+ if (result != MessageBoxResult.Yes)
+ {
+ _isChangingTelemetryPrivacyInternally = true;
+ try
+ {
+ CheckBoxTelemetryPrivacyAccepted.IsChecked = true;
+ }
+ finally
+ {
+ _isChangingTelemetryPrivacyInternally = false;
+ }
+ return;
+ }
+
+ _isChangingTelemetryInternally = true;
+ try
+ {
+ SettingsManager.Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.None;
+ if (ComboBoxTelemetryUploadLevel != null)
+ {
+ ComboBoxTelemetryUploadLevel.SelectedIndex = 0;
+ }
+ }
+ finally
+ {
+ _isChangingTelemetryInternally = false;
+ }
+
+ if (SettingsManager.Settings.Startup.UpdateChannel != UpdateChannel.Release)
+ {
+ SettingsManager.Settings.Startup.UpdateChannel = UpdateChannel.Release;
+ DeviceIdentifier.UpdateUsageChannel(UpdateChannel.Release);
+ }
+
+ SettingsManager.Settings.Startup.HasAcceptedTelemetryPrivacy = false;
+ SettingsManager.SaveSettingsToFile();
+ }
+ }
+
+ private static bool PrivacyFileExists()
+ {
+ try
+ {
+ var assembly = Assembly.GetExecutingAssembly();
+ var resourceName = "Ink_Canvas.privacy.txt";
+ using (Stream stream = assembly.GetManifestResourceStream(resourceName))
+ {
+ return stream != null;
+ }
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ }
+}
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml
index 806f4023..7ac3c583 100644
--- a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml
+++ b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml
@@ -1,25 +1,22 @@
4
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ink Canvas/Windows/SettingsViews/Pages/WindowPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/WindowPage.xaml.cs
new file mode 100644
index 00000000..a63d5d03
--- /dev/null
+++ b/Ink Canvas/Windows/SettingsViews/Pages/WindowPage.xaml.cs
@@ -0,0 +1,251 @@
+using Ink_Canvas.Helpers;
+using Ink_Canvas.Windows.SettingsViews.Helpers;
+using System;
+using System.Collections.ObjectModel;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Ink_Canvas.Windows.SettingsViews.Pages
+{
+ public partial class WindowPage : iNKORE.UI.WPF.Modern.Controls.Page
+ {
+ private bool _isLoaded = false;
+ private bool _isAdmin = false;
+ private RadioButton _radioNormal;
+ private RadioButton _radioUIA;
+ private readonly ObservableCollection