diff --git a/Bililive_dm/App.xaml b/Bililive_dm/App.xaml index 1613cad..adaebea 100644 --- a/Bililive_dm/App.xaml +++ b/Bililive_dm/App.xaml @@ -15,6 +15,7 @@ + diff --git a/Bililive_dm/App.xaml.cs b/Bililive_dm/App.xaml.cs index ff9d7fc..b59b341 100644 --- a/Bililive_dm/App.xaml.cs +++ b/Bililive_dm/App.xaml.cs @@ -23,6 +23,7 @@ namespace Bililive_dm /// public partial class App: Application { + internal ResourceDictionary AeroWin8 { get; private set; } internal Collection merged { get; private set; } public App() @@ -92,6 +93,38 @@ private void AddArchSpecificDirectory() private void Application_Startup(object sender, StartupEventArgs e) { + var assemblies = new Dictionary(StringComparer.OrdinalIgnoreCase); + + AppDomain.CurrentDomain.AssemblyResolve += (_, args) => + { + var an = new AssemblyName(args.Name); + var name = an.Name; + + switch (name) + { + case "PresentationTheme.Aero": + case "PresentationTheme.Aero.Win8": + break; + default: + return null; + } + + if (assemblies.TryGetValue(name, out var assembly)) return assembly; + + var ms = new MemoryStream(); + using (var rs = Assembly.GetExecutingAssembly().GetManifestResourceStream($"Bililive_dm.Assets.{name}.dll.gz")) + using (var zs = new GZipStream(rs, CompressionMode.Decompress)) + zs.CopyTo(ms); + + var data = new byte[ms.Length]; + ms.Position = 0; + ms.Read(data, 0, data.Length); + + return assemblies[name] = Assembly.Load(data); + }; + + AeroWin8 = (ResourceDictionary)Resources["Win8"]; + merged = Resources.MergedDictionaries; merged.Add((ResourceDictionary)Resources["Default"]); } diff --git a/Bililive_dm/Assets/PresentationTheme.Aero.Win8.dll.gz b/Bililive_dm/Assets/PresentationTheme.Aero.Win8.dll.gz new file mode 100644 index 0000000..1e02ddb Binary files /dev/null and b/Bililive_dm/Assets/PresentationTheme.Aero.Win8.dll.gz differ diff --git a/Bililive_dm/Assets/PresentationTheme.Aero.dll.gz b/Bililive_dm/Assets/PresentationTheme.Aero.dll.gz new file mode 100644 index 0000000..7c2fd33 Binary files /dev/null and b/Bililive_dm/Assets/PresentationTheme.Aero.dll.gz differ diff --git a/Bililive_dm/Bililive_dm.csproj b/Bililive_dm/Bililive_dm.csproj index a07b4ba..3f0ca40 100644 --- a/Bililive_dm/Bililive_dm.csproj +++ b/Bililive_dm/Bililive_dm.csproj @@ -278,6 +278,8 @@ Settings.Designer.cs + + diff --git a/Bililive_dm/MainWindow.xaml.cs b/Bililive_dm/MainWindow.xaml.cs index ff3733f..9edeca2 100644 --- a/Bililive_dm/MainWindow.xaml.cs +++ b/Bililive_dm/MainWindow.xaml.cs @@ -1603,6 +1603,14 @@ private void Skin_Click(object sender, RoutedEventArgs e) if (selector.Select() is ResourceDictionary result) { App.Current.merged[0] = result; + + if (result != App.Current.AeroWin8) return; + + Skin.Click -= Skin_Click; + + Skin.ToolTip = "既然被你發現了,就不能輕易讓你離開了!"; + ToolTipService.SetShowOnDisabled(Skin, true); + Skin.IsEnabled = false; } merged[0] = new ResourceDictionary(); } diff --git a/Bililive_dm/Selector.xaml.cs b/Bililive_dm/Selector.xaml.cs index f36711f..fe1a466 100644 --- a/Bililive_dm/Selector.xaml.cs +++ b/Bililive_dm/Selector.xaml.cs @@ -64,7 +64,7 @@ private void Button_Click(object sender, RoutedEventArgs e) public ResourceDictionary Select() { if (!ShowDialog().GetValueOrDefault()) return null; - return selected ?? new ResourceDictionary(); + return selected ?? App.Current.AeroWin8; } private void list_SelectionChanged(object sender, SelectionChangedEventArgs e) @@ -80,7 +80,7 @@ private void list_MouseDoubleClick(object sender, MouseButtonEventArgs e) private void list_Loaded(object sender, RoutedEventArgs e) { var li = (UIElement)list.ItemContainerGenerator.ContainerFromItem(list.SelectedItem); - li?.Focus(); + li.Focus(); } } }