Browse Source
Co-authored-by: Jumar Macato <16554748+jmacato@users.noreply.github.com>pull/18562/head
committed by
GitHub
16 changed files with 185 additions and 89 deletions
@ -0,0 +1,45 @@ |
|||||
|
using System; |
||||
|
using Avalonia.LogicalTree; |
||||
|
|
||||
|
namespace Avalonia.Controls; |
||||
|
|
||||
|
internal static class ResourcesChangedHelper |
||||
|
{ |
||||
|
internal static void NotifyHostedResourcesChanged(this IResourceHost host, ResourcesChangedToken token) |
||||
|
{ |
||||
|
if (host is IResourceHost2 host2) |
||||
|
host2.NotifyHostedResourcesChanged(token); |
||||
|
else |
||||
|
host.NotifyHostedResourcesChanged(ResourcesChangedEventArgs.Empty); |
||||
|
} |
||||
|
|
||||
|
internal static void NotifyResourcesChanged(this ILogical logical, ResourcesChangedToken token) |
||||
|
{ |
||||
|
if (logical is StyledElement styledElement) |
||||
|
styledElement.NotifyResourcesChanged(token); |
||||
|
else |
||||
|
logical.NotifyResourcesChanged(ResourcesChangedEventArgs.Empty); |
||||
|
} |
||||
|
|
||||
|
internal static void SubscribeToResourcesChanged( |
||||
|
this IResourceHost host, |
||||
|
EventHandler<ResourcesChangedEventArgs> handler, |
||||
|
EventHandler<ResourcesChangedToken> handler2) |
||||
|
{ |
||||
|
if (host is IResourceHost2 host2) |
||||
|
host2.ResourcesChanged2 += handler2; |
||||
|
else |
||||
|
host.ResourcesChanged += handler; |
||||
|
} |
||||
|
|
||||
|
internal static void UnsubscribeFromResourcesChanged( |
||||
|
this IResourceHost host, |
||||
|
EventHandler<ResourcesChangedEventArgs> handler, |
||||
|
EventHandler<ResourcesChangedToken> handler2) |
||||
|
{ |
||||
|
if (host is IResourceHost2 host2) |
||||
|
host2.ResourcesChanged2 -= handler2; |
||||
|
else |
||||
|
host.ResourcesChanged -= handler; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
using System.Threading; |
||||
|
|
||||
|
namespace Avalonia.Controls; |
||||
|
|
||||
|
internal record struct ResourcesChangedToken(int SequenceNumber) |
||||
|
{ |
||||
|
private static int s_lastSequenceNumber; |
||||
|
|
||||
|
public static ResourcesChangedToken Create() |
||||
|
=> new(Interlocked.Increment(ref s_lastSequenceNumber)); |
||||
|
} |
||||
Loading…
Reference in new issue