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:
@@ -1,4 +1,4 @@
|
|||||||
<controls:NotificationFlyoutPresenter
|
<UserControl
|
||||||
x:Class="NotificationFlyout.Sample.Uwp.NotificationFlyoutPresenter"
|
x:Class="NotificationFlyout.Sample.Uwp.NotificationFlyoutPresenter"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
@@ -21,4 +21,4 @@
|
|||||||
<ToggleButton Margin="0,0,0,8" />
|
<ToggleButton Margin="0,0,0,8" />
|
||||||
<CalendarView Margin="0,0,0,8" />
|
<CalendarView Margin="0,0,0,8" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</controls:NotificationFlyoutPresenter>
|
</UserControl>
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ namespace NotificationFlyout.Uwp.UI.Controls
|
|||||||
{
|
{
|
||||||
public class NotificationFlyoutHost : Control
|
public class NotificationFlyoutHost : Control
|
||||||
{
|
{
|
||||||
public static readonly DependencyProperty FlyoutPresenterProperty =
|
public static readonly DependencyProperty ContentProperty =
|
||||||
DependencyProperty.Register(nameof(FlyoutPresenter),
|
DependencyProperty.Register(nameof(Content),
|
||||||
typeof(NotificationFlyoutPresenter), typeof(NotificationFlyoutHost),
|
typeof(UIElement), typeof(NotificationFlyoutHost),
|
||||||
new PropertyMetadata(null));
|
new PropertyMetadata(null));
|
||||||
|
|
||||||
private bool _isLoaded;
|
private bool _isLoaded;
|
||||||
@@ -22,10 +22,10 @@ namespace NotificationFlyout.Uwp.UI.Controls
|
|||||||
DefaultStyleKey = typeof(NotificationFlyoutHost);
|
DefaultStyleKey = typeof(NotificationFlyoutHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NotificationFlyoutPresenter FlyoutPresenter
|
public UIElement Content
|
||||||
{
|
{
|
||||||
get => (NotificationFlyoutPresenter)GetValue(FlyoutPresenterProperty);
|
get => (UIElement)GetValue(ContentProperty);
|
||||||
set => SetValue(FlyoutPresenterProperty, value);
|
set => SetValue(ContentProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HideFlyout()
|
public void HideFlyout()
|
||||||
@@ -59,7 +59,6 @@ namespace NotificationFlyout.Uwp.UI.Controls
|
|||||||
protected override void OnApplyTemplate()
|
protected override void OnApplyTemplate()
|
||||||
{
|
{
|
||||||
_root = GetTemplateChild("Root") as Grid;
|
_root = GetTemplateChild("Root") as Grid;
|
||||||
|
|
||||||
if (GetTemplateChild("ContentRoot") is Grid contentRoot)
|
if (GetTemplateChild("ContentRoot") is Grid contentRoot)
|
||||||
{
|
{
|
||||||
contentRoot.Shadow = new ThemeShadow();
|
contentRoot.Shadow = new ThemeShadow();
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@
|
|||||||
FromVerticalOffset="0" />
|
FromVerticalOffset="0" />
|
||||||
</TransitionCollection>
|
</TransitionCollection>
|
||||||
</Grid.Transitions>
|
</Grid.Transitions>
|
||||||
<ContentControl Content="{TemplateBinding FlyoutPresenter}" />
|
<controls:NotificationFlyoutContentPresenter Content="{TemplateBinding Content}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Flyout>
|
</Flyout>
|
||||||
</FlyoutBase.AttachedFlyout>
|
</FlyoutBase.AttachedFlyout>
|
||||||
|
|||||||
+1
-60
@@ -1,71 +1,12 @@
|
|||||||
using System.Linq;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Popups;
|
|
||||||
using Windows.UI.Xaml;
|
|
||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Controls
|
namespace NotificationFlyout.Uwp.UI.Controls
|
||||||
{
|
{
|
||||||
public class NotificationFlyoutPresenter : ContentControl
|
public class NotificationFlyoutPresenter : ContentControl
|
||||||
{
|
{
|
||||||
private NotificationFlyoutContentPresenter _contentPresenter;
|
|
||||||
|
|
||||||
private bool _isColorPrevalence;
|
|
||||||
private ElementTheme _systemTheme;
|
|
||||||
|
|
||||||
public NotificationFlyoutPresenter()
|
public NotificationFlyoutPresenter()
|
||||||
{
|
{
|
||||||
DefaultStyleKey = typeof(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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-3
@@ -6,10 +6,8 @@
|
|||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="controls:NotificationFlyoutPresenter">
|
<ControlTemplate TargetType="controls:NotificationFlyoutPresenter">
|
||||||
<controls:NotificationFlyoutContentPresenter
|
<ContentPresenter
|
||||||
x:Name="ContentPresenter"
|
x:Name="ContentPresenter"
|
||||||
Width="200"
|
|
||||||
Height="200"
|
|
||||||
Content="{TemplateBinding Content}"
|
Content="{TemplateBinding Content}"
|
||||||
ContentTemplate="{TemplateBinding ContentTemplate}" />
|
ContentTemplate="{TemplateBinding ContentTemplate}" />
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using System.Windows.Media;
|
|||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Controls
|
namespace NotificationFlyout.Wpf.UI.Controls
|
||||||
{
|
{
|
||||||
[ContentProperty(nameof(FlyoutPresenter))]
|
[ContentProperty(nameof(Content))]
|
||||||
public class NotificationFlyout : DependencyObject
|
public class NotificationFlyout : DependencyObject
|
||||||
{
|
{
|
||||||
public static readonly DependencyProperty IconSourceProperty =
|
public static readonly DependencyProperty IconSourceProperty =
|
||||||
@@ -18,9 +18,9 @@ namespace NotificationFlyout.Wpf.UI.Controls
|
|||||||
typeof(ImageSource), typeof(NotificationFlyout),
|
typeof(ImageSource), typeof(NotificationFlyout),
|
||||||
new PropertyMetadata(null, OnIconPropertyChanged));
|
new PropertyMetadata(null, OnIconPropertyChanged));
|
||||||
|
|
||||||
public static DependencyProperty FlyoutPresenterProperty =
|
public static DependencyProperty ContentProperty =
|
||||||
DependencyProperty.Register(nameof(FlyoutPresenter),
|
DependencyProperty.Register(nameof(Content),
|
||||||
typeof(NotificationFlyoutPresenter), typeof(NotificationFlyout),
|
typeof(Windows.UI.Xaml.UIElement), typeof(NotificationFlyout),
|
||||||
new PropertyMetadata(null, OnFlyoutPresenterPropertyChanged));
|
new PropertyMetadata(null, OnFlyoutPresenterPropertyChanged));
|
||||||
|
|
||||||
private readonly NotificationFlyoutXamlHost _xamlHost;
|
private readonly NotificationFlyoutXamlHost _xamlHost;
|
||||||
@@ -31,10 +31,10 @@ namespace NotificationFlyout.Wpf.UI.Controls
|
|||||||
_xamlHost.Show();
|
_xamlHost.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public NotificationFlyoutPresenter FlyoutPresenter
|
public Windows.UI.Xaml.UIElement Content
|
||||||
{
|
{
|
||||||
get => (NotificationFlyoutPresenter)GetValue(FlyoutPresenterProperty);
|
get => (Windows.UI.Xaml.UIElement)GetValue(ContentProperty);
|
||||||
set => SetValue(FlyoutPresenterProperty, value);
|
set => SetValue(ContentProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageSource IconSource
|
public ImageSource IconSource
|
||||||
@@ -73,7 +73,7 @@ namespace NotificationFlyout.Wpf.UI.Controls
|
|||||||
|
|
||||||
private void OnFlyoutPresenterPropertyChanged()
|
private void OnFlyoutPresenterPropertyChanged()
|
||||||
{
|
{
|
||||||
_xamlHost.SetFlyoutPresenter(FlyoutPresenter);
|
_xamlHost.SetFlyoutContent(Content);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnIconPropertyChanged()
|
private void OnIconPropertyChanged()
|
||||||
|
|||||||
+2
-20
@@ -30,17 +30,12 @@ namespace NotificationFlyout.Wpf.UI.Controls
|
|||||||
Loaded += OnLoaded;
|
Loaded += OnLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetFlyoutPresenter(NotificationFlyoutPresenter flyoutPresenter)
|
public void SetFlyoutContent(Windows.UI.Xaml.UIElement content)
|
||||||
{
|
{
|
||||||
var flyoutHost = GetFlyoutHost();
|
var flyoutHost = GetFlyoutHost();
|
||||||
if (flyoutHost != null)
|
if (flyoutHost != null)
|
||||||
{
|
{
|
||||||
flyoutHost.FlyoutPresenter = flyoutPresenter;
|
flyoutHost.Content = content;
|
||||||
|
|
||||||
var theme = _systemPersonalisationHelper.Theme.ToString();
|
|
||||||
var isColorPrevalence = _systemPersonalisationHelper.IsColorPrevalence;
|
|
||||||
|
|
||||||
flyoutHost.FlyoutPresenter.UpdateFlyoutTheme(theme, isColorPrevalence);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,22 +106,9 @@ namespace NotificationFlyout.Wpf.UI.Controls
|
|||||||
|
|
||||||
private void OnThemeChanged(object sender, SystemPersonalisationChangedEventArgs args)
|
private void OnThemeChanged(object sender, SystemPersonalisationChangedEventArgs args)
|
||||||
{
|
{
|
||||||
NewMethod(args);
|
|
||||||
UpdateIcon();
|
UpdateIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void NewMethod(SystemPersonalisationChangedEventArgs args)
|
|
||||||
{
|
|
||||||
var flyoutHost = GetFlyoutHost();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
var theme = args.Theme.ToString();
|
|
||||||
var isColorPrevalence = args.IsColorPrevalence;
|
|
||||||
|
|
||||||
flyoutHost.FlyoutPresenter.UpdateFlyoutTheme(theme, isColorPrevalence);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PrepareDefaultWindow()
|
private void PrepareDefaultWindow()
|
||||||
{
|
{
|
||||||
ShowInTaskbar = false;
|
ShowInTaskbar = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user