diff --git a/DrfxFontFixer/DrfxFontFixer.csproj b/DrfxFontFixer/DrfxFontFixer.csproj
deleted file mode 100644
index ab1a647..0000000
--- a/DrfxFontFixer/DrfxFontFixer.csproj
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- net8.0-windows
- WinExe
- 13.0
- true
- true
- AnyCPU;x64
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/KeyGen/App.xaml b/KeyGen/App.xaml
new file mode 100644
index 0000000..fef1807
--- /dev/null
+++ b/KeyGen/App.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/KeyGen/App.xaml.cs b/KeyGen/App.xaml.cs
new file mode 100644
index 0000000..b6bedf6
--- /dev/null
+++ b/KeyGen/App.xaml.cs
@@ -0,0 +1,12 @@
+using System.Configuration;
+using System.Data;
+using System.Windows;
+
+namespace KeyGen;
+
+///
+/// Interaction logic for App.xaml
+///
+public partial class App : Application
+{
+}
\ No newline at end of file
diff --git a/KeyGen/AssemblyInfo.cs b/KeyGen/AssemblyInfo.cs
new file mode 100644
index 0000000..4a05c7d
--- /dev/null
+++ b/KeyGen/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
\ No newline at end of file
diff --git a/KeyGen/KeyGen.csproj b/KeyGen/KeyGen.csproj
new file mode 100644
index 0000000..5f665df
--- /dev/null
+++ b/KeyGen/KeyGen.csproj
@@ -0,0 +1,20 @@
+
+
+
+ WinExe
+ net48
+ preview
+ enable
+ enable
+ true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/KeyGen/LicenseManager.cs b/KeyGen/LicenseManager.cs
index d2f46ec..6605cf4 100644
--- a/KeyGen/LicenseManager.cs
+++ b/KeyGen/LicenseManager.cs
@@ -1,4 +1,7 @@
-using System.Text;
+using System.Reflection;
+using System.Security.Cryptography;
+using System.Text;
+using Microsoft.Win32;
namespace KeyGen
{
diff --git a/KeyGen/MainWindow.xaml b/KeyGen/MainWindow.xaml
new file mode 100644
index 0000000..c5dc035
--- /dev/null
+++ b/KeyGen/MainWindow.xaml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/KeyGen/MainWindow.xaml.cs b/KeyGen/MainWindow.xaml.cs
new file mode 100644
index 0000000..418f348
--- /dev/null
+++ b/KeyGen/MainWindow.xaml.cs
@@ -0,0 +1,168 @@
+using System.IO;
+using System.Management;
+using System.Security.Cryptography;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using Melskin.Controls;
+
+namespace KeyGen;
+
+///
+/// Interaction logic for MainWindow.xaml
+///
+public partial class MainWindow
+{
+ private static string _privateKey = string.Empty;
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+ private void LicenseClick(object sender, RoutedEventArgs e)
+ {
+ _privateKey = PrivateKeyTextBox.Text;
+ LicenseManager.PublicKey = PublicKeyTextBox.Text;
+ DateTime issueDate = DateTime.Now;
+ //DateTime expiryDate = issueDate.AddYears(1);
+ DateTime expiryDate = ExpiryDatePicker.DisplayDate;
+ if (expiryDate < issueDate)
+ {
+ MessageBox.Show("授权到期时间有误,应比发码日期晚");
+ return;
+ }
+ string mCode = MachineCodeTextBox.Text.Trim().ToUpper();
+ if (string.IsNullOrEmpty(mCode))
+ {
+ MessageBox.Show("请先获取机器码");
+ return;
+ }
+ string key = CreateLicense(mCode, issueDate, expiryDate);
+ LicenseTextBox.Text = key;
+ Clipboard.SetText(key);
+ MessageBox.Show("激活码已复制!");
+ }
+
+ private string CreateLicense(string machineCode, DateTime issue, DateTime expiry)
+ {
+ string issueStr = issue.ToString("yyyyMMdd");
+ string expiryStr = expiry.ToString("yyyyMMdd");
+
+ // 签名原始数据:机器码 + 发码日期 + 过期日期
+ string dataToSign = $"{machineCode}|{issueStr}|{expiryStr}";
+
+ using (var rsa = new RSACryptoServiceProvider())
+ {
+ rsa.FromXmlString(_privateKey);
+ var formatter = new RSAPKCS1SignatureFormatter(rsa);
+ formatter.SetHashAlgorithm("SHA256");
+
+ byte[] dataBytes = Encoding.UTF8.GetBytes(dataToSign);
+ using (var sha = SHA256.Create())
+ {
+ byte[] hash = sha.ComputeHash(dataBytes);
+ string signature = Convert.ToBase64String(formatter.CreateSignature(hash));
+
+ // 最终格式:签名|机器码|发码日期|过期日期
+ return $"{signature}|{machineCode}|{issueStr}|{expiryStr}";
+ }
+ }
+ }
+
+ private void GenerateKeyClick(object sender, RoutedEventArgs e)
+ {
+ using var rsa = new RSACryptoServiceProvider(2048);
+ PublicKeyTextBox.Text = rsa.ToXmlString(false); // 放在插件里
+ PrivateKeyTextBox.Text = rsa.ToXmlString(true); // 自己妥善保存
+ }
+
+ private void ValidateClick(object sender, RoutedEventArgs e)
+ {
+ var result = LicenseManager.Validate();
+ MessageBox.Show(result.msg);
+ }
+
+ private void RemoveLicenseClick(object sender, RoutedEventArgs e)
+ {
+ LicenseManager.RemoveLicense();
+ MessageBox.Show("授权已注销");
+ }
+
+ private void ActivateClick(object sender, RoutedEventArgs e)
+ {
+ LicenseManager.Activate(LicenseTextBox.Text);
+ }
+
+ private void MachineCodeClick(object sender, RoutedEventArgs e)
+ {
+ MachineCodeTextBox.Text = HardwareInfo.GetMachineCode();
+ }
+
+ private void SaveKeysClick(object sender, RoutedEventArgs e)
+ {
+ VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog();
+ if (dialog.ShowDialog())
+ {
+ string publicKeyPath = System.IO.Path.Combine(dialog.SelectedPath, "PublicKey.txt");
+ File.WriteAllText(publicKeyPath, PublicKeyTextBox.Text);
+ string privateKeyPath = System.IO.Path.Combine(dialog.SelectedPath, "PrivateKey.txt");
+ File.WriteAllText(privateKeyPath, PrivateKeyTextBox.Text);
+ MessageBox.Show($"公私密钥已保存到:{dialog.SelectedPath}");
+ }
+ }
+
+ private void SaveLicenseClick(object sender, RoutedEventArgs e)
+ {
+ VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog();
+ if (dialog.ShowDialog())
+ {
+ string path = System.IO.Path.Combine(dialog.SelectedPath, "license.txt");
+ File.WriteAllText(path, LicenseTextBox.Text);
+ MessageBox.Show($"激活码已保存到:{path}");
+ }
+ }
+}
+public static class HardwareInfo
+{
+ public static string GetMachineCode()
+ {
+ try
+ {
+ string cpu = GetWmiInfo("Win32_Processor", "ProcessorId");
+ string board = GetWmiInfo("Win32_BaseBoard", "SerialNumber");
+ string disk = GetWmiInfo("Win32_PhysicalMedia", "SerialNumber"); // 物理硬盘序列号
+
+ // 拼接并哈希,只取前16位,方便复制
+ string raw = $"{cpu}@{board}@{disk}";
+ using (var sha = SHA256.Create())
+ {
+ byte[] bytes = sha.ComputeHash(Encoding.UTF8.GetBytes(raw));
+ return BitConverter.ToString(bytes).Replace("-", "").Substring(0, 16).ToUpper();
+ }
+ }
+ catch
+ {
+ return "ERROR-HARDWARE-ID";
+ }
+ }
+
+ private static string GetWmiInfo(string table, string prop)
+ {
+ try
+ {
+ using (var mc = new ManagementClass(table))
+ foreach (var mo in mc.GetInstances())
+ {
+ string val = mo[prop]?.ToString();
+ if (!string.IsNullOrWhiteSpace(val)) return val.Trim();
+ }
+ }
+ catch { }
+ return "UNKNOWN";
+ }
+}
\ No newline at end of file
diff --git a/KeyGen/TimeHelper.cs b/KeyGen/TimeHelper.cs
index 1d14e63..13985ae 100644
--- a/KeyGen/TimeHelper.cs
+++ b/KeyGen/TimeHelper.cs
@@ -1,4 +1,6 @@
-using System.Windows.Shapes;
+using System.Globalization;
+using System.IO;
+using System.Net;
namespace KeyGen
{
diff --git a/NeoUI/Melskin/Appearance/ControlsDictionary.cs b/Melskin/Appearance/ControlsDictionary.cs
similarity index 100%
rename from NeoUI/Melskin/Appearance/ControlsDictionary.cs
rename to Melskin/Appearance/ControlsDictionary.cs
diff --git a/NeoUI/Melskin/Appearance/ThemeManager.cs b/Melskin/Appearance/ThemeManager.cs
similarity index 100%
rename from NeoUI/Melskin/Appearance/ThemeManager.cs
rename to Melskin/Appearance/ThemeManager.cs
diff --git a/NeoUI/Melskin/Appearance/ThemeMode.cs b/Melskin/Appearance/ThemeMode.cs
similarity index 100%
rename from NeoUI/Melskin/Appearance/ThemeMode.cs
rename to Melskin/Appearance/ThemeMode.cs
diff --git a/NeoUI/Melskin/Appearance/ThemePreferenceStore.cs b/Melskin/Appearance/ThemePreferenceStore.cs
similarity index 100%
rename from NeoUI/Melskin/Appearance/ThemePreferenceStore.cs
rename to Melskin/Appearance/ThemePreferenceStore.cs
diff --git a/NeoUI/Melskin/Appearance/ThemesDictionary.cs b/Melskin/Appearance/ThemesDictionary.cs
similarity index 100%
rename from NeoUI/Melskin/Appearance/ThemesDictionary.cs
rename to Melskin/Appearance/ThemesDictionary.cs
diff --git a/NeoUI/Melskin/Assets/MaterialSymbol.cs b/Melskin/Assets/MaterialSymbol.cs
similarity index 100%
rename from NeoUI/Melskin/Assets/MaterialSymbol.cs
rename to Melskin/Assets/MaterialSymbol.cs
diff --git a/NeoUI/Melskin/Assets/MaterialSymbols.xaml b/Melskin/Assets/MaterialSymbols.xaml
similarity index 100%
rename from NeoUI/Melskin/Assets/MaterialSymbols.xaml
rename to Melskin/Assets/MaterialSymbols.xaml
diff --git a/NeoUI/Melskin/Assets/MaterialSymbolsRounded-Regular.ttf b/Melskin/Assets/MaterialSymbolsRounded-Regular.ttf
similarity index 100%
rename from NeoUI/Melskin/Assets/MaterialSymbolsRounded-Regular.ttf
rename to Melskin/Assets/MaterialSymbolsRounded-Regular.ttf
diff --git a/NeoUI/Melskin/Assists/BehaviorAssist.cs b/Melskin/Assists/BehaviorAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/BehaviorAssist.cs
rename to Melskin/Assists/BehaviorAssist.cs
diff --git a/NeoUI/Melskin/Assists/BindingProxy.cs b/Melskin/Assists/BindingProxy.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/BindingProxy.cs
rename to Melskin/Assists/BindingProxy.cs
diff --git a/NeoUI/Melskin/Assists/ColorAssist.cs b/Melskin/Assists/ColorAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/ColorAssist.cs
rename to Melskin/Assists/ColorAssist.cs
diff --git a/NeoUI/Melskin/Assists/ControlAssist.cs b/Melskin/Assists/ControlAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/ControlAssist.cs
rename to Melskin/Assists/ControlAssist.cs
diff --git a/NeoUI/Melskin/Assists/DataGridAssist.cs b/Melskin/Assists/DataGridAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/DataGridAssist.cs
rename to Melskin/Assists/DataGridAssist.cs
diff --git a/NeoUI/Melskin/Assists/InputAssist.cs b/Melskin/Assists/InputAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/InputAssist.cs
rename to Melskin/Assists/InputAssist.cs
diff --git a/NeoUI/Melskin/Assists/ShadingAssist.cs b/Melskin/Assists/ShadingAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/ShadingAssist.cs
rename to Melskin/Assists/ShadingAssist.cs
diff --git a/NeoUI/Melskin/Assists/TabAssist.cs b/Melskin/Assists/TabAssist.cs
similarity index 100%
rename from NeoUI/Melskin/Assists/TabAssist.cs
rename to Melskin/Assists/TabAssist.cs
diff --git a/NeoUI/Melskin/Controls/Accordion.xaml b/Melskin/Controls/Accordion.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Accordion.xaml
rename to Melskin/Controls/Accordion.xaml
diff --git a/NeoUI/Melskin/Controls/Accordion.xaml.cs b/Melskin/Controls/Accordion.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Accordion.xaml.cs
rename to Melskin/Controls/Accordion.xaml.cs
diff --git a/NeoUI/Melskin/Controls/AccordionItem.cs b/Melskin/Controls/AccordionItem.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/AccordionItem.cs
rename to Melskin/Controls/AccordionItem.cs
diff --git a/NeoUI/Melskin/Controls/Alert.xaml b/Melskin/Controls/Alert.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Alert.xaml
rename to Melskin/Controls/Alert.xaml
diff --git a/NeoUI/Melskin/Controls/Alert.xaml.cs b/Melskin/Controls/Alert.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Alert.xaml.cs
rename to Melskin/Controls/Alert.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Anchor.xaml b/Melskin/Controls/Anchor.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Anchor.xaml
rename to Melskin/Controls/Anchor.xaml
diff --git a/NeoUI/Melskin/Controls/Anchor.xaml.cs b/Melskin/Controls/Anchor.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Anchor.xaml.cs
rename to Melskin/Controls/Anchor.xaml.cs
diff --git a/NeoUI/Melskin/Controls/AppearanceType.cs b/Melskin/Controls/AppearanceType.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/AppearanceType.cs
rename to Melskin/Controls/AppearanceType.cs
diff --git a/NeoUI/Melskin/Controls/AutoComplete.xaml b/Melskin/Controls/AutoComplete.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/AutoComplete.xaml
rename to Melskin/Controls/AutoComplete.xaml
diff --git a/NeoUI/Melskin/Controls/AutoComplete.xaml.cs b/Melskin/Controls/AutoComplete.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/AutoComplete.xaml.cs
rename to Melskin/Controls/AutoComplete.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Avatar.xaml b/Melskin/Controls/Avatar.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Avatar.xaml
rename to Melskin/Controls/Avatar.xaml
diff --git a/NeoUI/Melskin/Controls/Avatar.xaml.cs b/Melskin/Controls/Avatar.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Avatar.xaml.cs
rename to Melskin/Controls/Avatar.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Badge.xaml b/Melskin/Controls/Badge.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Badge.xaml
rename to Melskin/Controls/Badge.xaml
diff --git a/NeoUI/Melskin/Controls/Badge.xaml.cs b/Melskin/Controls/Badge.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Badge.xaml.cs
rename to Melskin/Controls/Badge.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Breadcrumb.xaml b/Melskin/Controls/Breadcrumb.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Breadcrumb.xaml
rename to Melskin/Controls/Breadcrumb.xaml
diff --git a/NeoUI/Melskin/Controls/Breadcrumb.xaml.cs b/Melskin/Controls/Breadcrumb.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Breadcrumb.xaml.cs
rename to Melskin/Controls/Breadcrumb.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Button.xaml b/Melskin/Controls/Button.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Button.xaml
rename to Melskin/Controls/Button.xaml
diff --git a/NeoUI/Melskin/Controls/Calendar.xaml b/Melskin/Controls/Calendar.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Calendar.xaml
rename to Melskin/Controls/Calendar.xaml
diff --git a/NeoUI/Melskin/Controls/Card.xaml b/Melskin/Controls/Card.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Card.xaml
rename to Melskin/Controls/Card.xaml
diff --git a/NeoUI/Melskin/Controls/Card.xaml.cs b/Melskin/Controls/Card.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Card.xaml.cs
rename to Melskin/Controls/Card.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Cascader.xaml b/Melskin/Controls/Cascader.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Cascader.xaml
rename to Melskin/Controls/Cascader.xaml
diff --git a/NeoUI/Melskin/Controls/Cascader.xaml.cs b/Melskin/Controls/Cascader.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Cascader.xaml.cs
rename to Melskin/Controls/Cascader.xaml.cs
diff --git a/NeoUI/Melskin/Controls/CheckBox.xaml b/Melskin/Controls/CheckBox.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/CheckBox.xaml
rename to Melskin/Controls/CheckBox.xaml
diff --git a/NeoUI/Melskin/Controls/CheckableTag.xaml b/Melskin/Controls/CheckableTag.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/CheckableTag.xaml
rename to Melskin/Controls/CheckableTag.xaml
diff --git a/NeoUI/Melskin/Controls/CheckableTag.xaml.cs b/Melskin/Controls/CheckableTag.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/CheckableTag.xaml.cs
rename to Melskin/Controls/CheckableTag.xaml.cs
diff --git a/NeoUI/Melskin/Controls/Chip.xaml b/Melskin/Controls/Chip.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/Chip.xaml
rename to Melskin/Controls/Chip.xaml
diff --git a/NeoUI/Melskin/Controls/Chip.xaml.cs b/Melskin/Controls/Chip.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/Chip.xaml.cs
rename to Melskin/Controls/Chip.xaml.cs
diff --git a/NeoUI/Melskin/Controls/ChooseBox.xaml b/Melskin/Controls/ChooseBox.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/ChooseBox.xaml
rename to Melskin/Controls/ChooseBox.xaml
diff --git a/NeoUI/Melskin/Controls/ChooseBox.xaml.cs b/Melskin/Controls/ChooseBox.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/ChooseBox.xaml.cs
rename to Melskin/Controls/ChooseBox.xaml.cs
diff --git a/NeoUI/Melskin/Controls/CodeBox.xaml b/Melskin/Controls/CodeBox.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/CodeBox.xaml
rename to Melskin/Controls/CodeBox.xaml
diff --git a/NeoUI/Melskin/Controls/CodeBox.xaml.cs b/Melskin/Controls/CodeBox.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/CodeBox.xaml.cs
rename to Melskin/Controls/CodeBox.xaml.cs
diff --git a/NeoUI/Melskin/Controls/ColorPicker/ColorInputMode.cs b/Melskin/Controls/ColorPicker/ColorInputMode.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/ColorPicker/ColorInputMode.cs
rename to Melskin/Controls/ColorPicker/ColorInputMode.cs
diff --git a/NeoUI/Melskin/Controls/ColorPicker/ColorPanel.xaml b/Melskin/Controls/ColorPicker/ColorPanel.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/ColorPicker/ColorPanel.xaml
rename to Melskin/Controls/ColorPicker/ColorPanel.xaml
diff --git a/NeoUI/Melskin/Controls/ColorPicker/ColorPanel.xaml.cs b/Melskin/Controls/ColorPicker/ColorPanel.xaml.cs
similarity index 99%
rename from NeoUI/Melskin/Controls/ColorPicker/ColorPanel.xaml.cs
rename to Melskin/Controls/ColorPicker/ColorPanel.xaml.cs
index be1396c..353a802 100644
--- a/NeoUI/Melskin/Controls/ColorPicker/ColorPanel.xaml.cs
+++ b/Melskin/Controls/ColorPicker/ColorPanel.xaml.cs
@@ -46,7 +46,7 @@ public class ColorPanel : Control
///
public ICommand SelectPresetColorCommand { get; }
- private void ExecuteSelectPresetColor(object parameter)
+ private void ExecuteSelectPresetColor(object? parameter)
{
if (parameter is Color color)
{
diff --git a/NeoUI/Melskin/Controls/ColorPicker/ColorPicker.xaml b/Melskin/Controls/ColorPicker/ColorPicker.xaml
similarity index 100%
rename from NeoUI/Melskin/Controls/ColorPicker/ColorPicker.xaml
rename to Melskin/Controls/ColorPicker/ColorPicker.xaml
diff --git a/NeoUI/Melskin/Controls/ColorPicker/ColorPicker.xaml.cs b/Melskin/Controls/ColorPicker/ColorPicker.xaml.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/ColorPicker/ColorPicker.xaml.cs
rename to Melskin/Controls/ColorPicker/ColorPicker.xaml.cs
diff --git a/NeoUI/Melskin/Controls/ColorPicker/HSVColor.cs b/Melskin/Controls/ColorPicker/HSVColor.cs
similarity index 100%
rename from NeoUI/Melskin/Controls/ColorPicker/HSVColor.cs
rename to Melskin/Controls/ColorPicker/HSVColor.cs
diff --git a/NeoUI/Melskin/Controls/ComboBox.xaml b/Melskin/Controls/ComboBox.xaml
similarity index 73%
rename from NeoUI/Melskin/Controls/ComboBox.xaml
rename to Melskin/Controls/ComboBox.xaml
index 7ea9dbf..647ef81 100644
--- a/NeoUI/Melskin/Controls/ComboBox.xaml
+++ b/Melskin/Controls/ComboBox.xaml
@@ -1,10 +1,10 @@
+ xmlns:decorations="clr-namespace:Melskin.Controls.Decorations">
@@ -13,38 +13,38 @@
+ To="0.8"
+ Duration="0:0:0.2" />
+ Storyboard.TargetProperty="ShaderEnabled"
+ Duration="0">
+ To="0"
+ Duration="0:0:0.2" />
+ Storyboard.TargetProperty="ShaderEnabled"
+ Duration="0:0:0.2">
+ To="0.4"
+ Duration="0" />
@@ -62,41 +62,41 @@
+ SnapsToDevicePixels="True">
+ VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
+ SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
+ Visibility="Hidden">
+ HorizontalAlignment="Left"
+ Background="{DynamicResource PrimaryNormalBrush}"
+ CornerRadius="2" />
-
+
-
+
-
+
-
-
-
+
+
-
+
+ VerticalOffset="4">
-
-
+ CornerRadius="4">
+
+
+ SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
+ Style="{StaticResource FloatComboBoxToggleButton}" />
+ Background="Transparent"
+ IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}"
+ Style="{StaticResource FlattenTextBoxStyle}" />
+ Foreground="{DynamicResource TextPlaceholderBrush}"
+ IsHitTestVisible="False"
+ Text="{Binding Path=(assists:InputAssist.PlaceholderText), RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}}">
-
-
-
+
+
-
+
+ VerticalOffset="4">
-
-
+ CornerRadius="4">
+
+
+ SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
+ Style="{StaticResource ComboBoxToggleButton}" />
+ Background="Transparent"
+ IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}"
+ Style="{StaticResource FlattenTextBoxStyle}" />
+ Margin="{TemplateBinding BorderThickness}"
+ IsHitTestVisible="False">
-
+
+ Foreground="{DynamicResource TextPlaceholderBrush}"
+ Text="{Binding Path=(assists:InputAssist.PlaceholderText), RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}}">
-
+
-
-
-
+
+
-
+
+ VerticalOffset="4">
-
-
+ CornerRadius="4">
+
+
+ SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
+ Style="{StaticResource ToolbarComboBoxToggleButtonStyle}" />
+ SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
-
-
+
+
-
+
@@ -929,18 +937,18 @@
-
-
-
+
+
+