fix: unregister from old scope.
This commit is contained in:
@@ -40,11 +40,14 @@ public abstract class ThemeSelectorBase: TemplatedControl
|
|||||||
|
|
||||||
private void OnTargetScopeChanged(AvaloniaPropertyChangedEventArgs<ThemeVariantScope?> args)
|
private void OnTargetScopeChanged(AvaloniaPropertyChangedEventArgs<ThemeVariantScope?> args)
|
||||||
{
|
{
|
||||||
var target = args.NewValue.Value;
|
if (args.OldValue.Value is { } oldTarget)
|
||||||
if (target is not null)
|
|
||||||
{
|
{
|
||||||
SyncThemeFromScope(target.ActualThemeVariant);
|
oldTarget.ActualThemeVariantChanged -= OnScopeThemeChanged;
|
||||||
target.ActualThemeVariantChanged += OnScopeThemeChanged;
|
}
|
||||||
|
if (args.NewValue.Value is { } newTarget)
|
||||||
|
{
|
||||||
|
newTarget.ActualThemeVariantChanged += OnScopeThemeChanged;
|
||||||
|
SyncThemeFromScope(newTarget.ActualThemeVariant);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +69,7 @@ public abstract class ThemeSelectorBase: TemplatedControl
|
|||||||
_syncFromScope = false;
|
_syncFromScope = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected internal virtual void SyncThemeFromScope(ThemeVariant? theme)
|
protected virtual void SyncThemeFromScope(ThemeVariant? theme)
|
||||||
{
|
{
|
||||||
this.SelectedTheme = theme;
|
this.SelectedTheme = theme;
|
||||||
}
|
}
|
||||||
@@ -86,7 +89,6 @@ public abstract class ThemeSelectorBase: TemplatedControl
|
|||||||
_scope.ActualThemeVariantChanged += OnScopeThemeChanged;
|
_scope.ActualThemeVariantChanged += OnScopeThemeChanged;
|
||||||
SyncThemeFromScope(_scope.ActualThemeVariant);
|
SyncThemeFromScope(_scope.ActualThemeVariant);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TargetScope is not null)
|
if (TargetScope is not null)
|
||||||
{
|
{
|
||||||
SyncThemeFromScope(TargetScope.ActualThemeVariant);
|
SyncThemeFromScope(TargetScope.ActualThemeVariant);
|
||||||
@@ -100,7 +102,6 @@ public abstract class ThemeSelectorBase: TemplatedControl
|
|||||||
{
|
{
|
||||||
_application.ActualThemeVariantChanged -= OnScopeThemeChanged;
|
_application.ActualThemeVariantChanged -= OnScopeThemeChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_scope is not null)
|
if (_scope is not null)
|
||||||
{
|
{
|
||||||
_scope.ActualThemeVariantChanged -= OnScopeThemeChanged;
|
_scope.ActualThemeVariantChanged -= OnScopeThemeChanged;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class ThemeToggleButton: ThemeSelectorBase
|
|||||||
SetCurrentValue(SelectedThemeProperty, newTheme.Value ? ThemeVariant.Light : ThemeVariant.Dark);
|
SetCurrentValue(SelectedThemeProperty, newTheme.Value ? ThemeVariant.Light : ThemeVariant.Dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected internal override void SyncThemeFromScope(ThemeVariant? theme)
|
protected override void SyncThemeFromScope(ThemeVariant? theme)
|
||||||
{
|
{
|
||||||
base.SyncThemeFromScope(theme);
|
base.SyncThemeFromScope(theme);
|
||||||
PropertyHelper.SetValue(ToggleButton.IsCheckedProperty, theme == ThemeVariant.Light, _button);
|
PropertyHelper.SetValue(ToggleButton.IsCheckedProperty, theme == ThemeVariant.Light, _button);
|
||||||
|
|||||||
Reference in New Issue
Block a user