Fixed some major issues where it wasn't possible to switch the app accent based on the current system accent.

This commit is contained in:
Daniel Clark
2021-02-09 13:10:23 +00:00
parent 085e632eb9
commit fae7721b5f
7 changed files with 21 additions and 101 deletions
@@ -8,9 +8,9 @@ namespace NotificationFlyout.Uwp.UI.Controls
{
public class NotificationFlyoutHost : Control
{
public static readonly DependencyProperty FlyoutPresenterProperty =
DependencyProperty.Register(nameof(FlyoutPresenter),
typeof(NotificationFlyoutPresenter), typeof(NotificationFlyoutHost),
public static readonly DependencyProperty ContentProperty =
DependencyProperty.Register(nameof(Content),
typeof(UIElement), typeof(NotificationFlyoutHost),
new PropertyMetadata(null));
private bool _isLoaded;
@@ -22,10 +22,10 @@ namespace NotificationFlyout.Uwp.UI.Controls
DefaultStyleKey = typeof(NotificationFlyoutHost);
}
public NotificationFlyoutPresenter FlyoutPresenter
public UIElement Content
{
get => (NotificationFlyoutPresenter)GetValue(FlyoutPresenterProperty);
set => SetValue(FlyoutPresenterProperty, value);
get => (UIElement)GetValue(ContentProperty);
set => SetValue(ContentProperty, value);
}
public void HideFlyout()
@@ -59,7 +59,6 @@ namespace NotificationFlyout.Uwp.UI.Controls
protected override void OnApplyTemplate()
{
_root = GetTemplateChild("Root") as Grid;
if (GetTemplateChild("ContentRoot") is Grid contentRoot)
{
contentRoot.Shadow = new ThemeShadow();
@@ -54,7 +54,7 @@
FromVerticalOffset="0" />
</TransitionCollection>
</Grid.Transitions>
<ContentControl Content="{TemplateBinding FlyoutPresenter}" />
<controls:NotificationFlyoutContentPresenter Content="{TemplateBinding Content}" />
</Grid>
</Flyout>
</FlyoutBase.AttachedFlyout>
@@ -1,71 +1,12 @@
using System.Linq;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls;
namespace NotificationFlyout.Uwp.UI.Controls
{
public class NotificationFlyoutPresenter : ContentControl
{
private NotificationFlyoutContentPresenter _contentPresenter;
private bool _isColorPrevalence;
private ElementTheme _systemTheme;
public NotificationFlyoutPresenter()
{
DefaultStyleKey = typeof(NotificationFlyoutPresenter);
RegisterPropertyChangedCallback(RequestedThemeProperty, RequestedThemePropertyChanged);
}
public void UpdateFlyoutTheme(string theme, bool isColorPrevalence)
{
_isColorPrevalence = isColorPrevalence;
switch (theme)
{
case "Dark":
_systemTheme = ElementTheme.Dark;
break;
case "Light":
_systemTheme = ElementTheme.Light;
break;
}
UpdateThemeVisualState();
}
protected override void OnApplyTemplate()
{
var _contentPresenter = GetTemplateChild("ContentPresenter") as NotificationFlyoutContentPresenter;
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs args)
{
UpdateThemeVisualState();
}
private void RequestedThemePropertyChanged(DependencyObject sender, DependencyProperty dependencyProperty)
{
if (RequestedTheme == ElementTheme.Default)
{
_contentPresenter.SetValue(RequestedThemeProperty, _systemTheme);
}
else
{
_contentPresenter.SetValue(RequestedThemeProperty, RequestedTheme);
}
}
private void UpdateThemeVisualState()
{
if (_contentPresenter == null) return;
if (RequestedTheme == ElementTheme.Default)
{
_contentPresenter.SetValue(RequestedThemeProperty, _systemTheme);
}
VisualStateManager.GoToState(_contentPresenter, _isColorPrevalence ? "ColorPrevalenceTheme" : "DefaultTheme", true);
}
}
}
@@ -6,10 +6,8 @@
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:NotificationFlyoutPresenter">
<controls:NotificationFlyoutContentPresenter
<ContentPresenter
x:Name="ContentPresenter"
Width="200"
Height="200"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</ControlTemplate>