|
@@ -1,3 +1,5 @@
|
|
|
|
|
+using Avalonia;
|
|
|
|
|
+using Avalonia;
|
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.VisualTree;
|
|
using Avalonia.VisualTree;
|
|
|
using YZWater.Avalonia.Controls;
|
|
using YZWater.Avalonia.Controls;
|
|
@@ -6,51 +8,43 @@ namespace YZWater.Avalonia.Views;
|
|
|
|
|
|
|
|
public partial class ViewAView : UserControl
|
|
public partial class ViewAView : UserControl
|
|
|
{
|
|
{
|
|
|
- private Border? _titleBar;
|
|
|
|
|
- private Border? _statusBar;
|
|
|
|
|
- private Border? _rootBorder;
|
|
|
|
|
- private TextBlock? _titleText;
|
|
|
|
|
- private TextBlock? _subtitleText;
|
|
|
|
|
-
|
|
|
|
|
public ViewAView()
|
|
public ViewAView()
|
|
|
{
|
|
{
|
|
|
InitializeComponent();
|
|
InitializeComponent();
|
|
|
- AttachedToVisualTree += (_, _) =>
|
|
|
|
|
- {
|
|
|
|
|
- FindElements();
|
|
|
|
|
- ApplyTheme();
|
|
|
|
|
- ThemeHelper.ThemeChanged += ApplyTheme;
|
|
|
|
|
- };
|
|
|
|
|
- DetachedFromVisualTree += (_, _) =>
|
|
|
|
|
- {
|
|
|
|
|
- ThemeHelper.ThemeChanged -= ApplyTheme;
|
|
|
|
|
- };
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void FindElements()
|
|
|
|
|
|
|
+ protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
|
|
|
{
|
|
{
|
|
|
- foreach (var v in this.GetVisualDescendants())
|
|
|
|
|
|
|
+ base.OnAttachedToVisualTree(e);
|
|
|
|
|
+ ThemeHelper.ThemeChanged += OnThemeChanged;
|
|
|
|
|
+ OnThemeChanged();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
|
|
|
|
|
+ {
|
|
|
|
|
+ ThemeHelper.ThemeChanged -= OnThemeChanged;
|
|
|
|
|
+ base.OnDetachedFromVisualTree(e);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void OnThemeChanged()
|
|
|
|
|
+ {
|
|
|
|
|
+ // 鐩存帴鐢 VisualTreeAttachmentEventArgs 鐨 Root 鎵惧厓绱
|
|
|
|
|
+ var root = this.GetVisualRoot() as Visual;
|
|
|
|
|
+ if (root == null) return;
|
|
|
|
|
+
|
|
|
|
|
+ foreach (var v in root.GetVisualDescendants())
|
|
|
{
|
|
{
|
|
|
if (v is Border b)
|
|
if (v is Border b)
|
|
|
{
|
|
{
|
|
|
- if (b.Name == "TitleBar") _titleBar = b;
|
|
|
|
|
- else if (b.Name == "StatusBar") _statusBar = b;
|
|
|
|
|
- else if (b.Name == "RootBorder") _rootBorder = b;
|
|
|
|
|
|
|
+ if (b.Name == "TitleBar") b.Background = ThemeHelper.HeaderBg;
|
|
|
|
|
+ else if (b.Name == "StatusBar") b.Background = ThemeHelper.NavBg;
|
|
|
|
|
+ else if (b.Name == "RootBorder") b.Background = ThemeHelper.AppBg;
|
|
|
}
|
|
}
|
|
|
else if (v is TextBlock tb)
|
|
else if (v is TextBlock tb)
|
|
|
{
|
|
{
|
|
|
- if (tb.Name == "TitleText") _titleText = tb;
|
|
|
|
|
- else if (tb.Name == "SubtitleText") _subtitleText = tb;
|
|
|
|
|
|
|
+ if (tb.Name == "TitleText") tb.Foreground = ThemeHelper.HeaderText;
|
|
|
|
|
+ else if (tb.Name == "SubtitleText") tb.Foreground = ThemeHelper.HeaderSubtext;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- private void ApplyTheme()
|
|
|
|
|
- {
|
|
|
|
|
- if (_titleBar != null) _titleBar.Background = ThemeHelper.HeaderBg;
|
|
|
|
|
- if (_statusBar != null) _statusBar.Background = ThemeHelper.NavBg;
|
|
|
|
|
- if (_rootBorder != null) _rootBorder.Background = ThemeHelper.AppBg;
|
|
|
|
|
- if (_titleText != null) _titleText.Foreground = ThemeHelper.HeaderText;
|
|
|
|
|
- if (_subtitleText != null) _subtitleText.Foreground = ThemeHelper.HeaderSubtext;
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|