project
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using Windows.Foundation;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Controls.Primitives;
|
||||
using Windows.UI.Xaml.Input;
|
||||
using Windows.UI.Xaml.Media.Animation;
|
||||
|
||||
namespace TheXamlGuy.TaskbarGroup.Flyout.Controls
|
||||
{
|
||||
public class TaskbarButtonFlyout : ContentControl
|
||||
{
|
||||
public static readonly DependencyProperty TemplateSettingsProperty =
|
||||
DependencyProperty.Register(nameof(TemplateSettings),
|
||||
typeof(TaskbarButtonFlyoutTemplateSettings), typeof(TaskbarButtonFlyout),
|
||||
new PropertyMetadata(null));
|
||||
|
||||
private UIElement child;
|
||||
private Border container;
|
||||
|
||||
public TaskbarButtonFlyout()
|
||||
{
|
||||
DefaultStyleKey = typeof(TaskbarButtonFlyout);
|
||||
TemplateSettings = new TaskbarButtonFlyoutTemplateSettings();
|
||||
}
|
||||
|
||||
public event EventHandler<object> Closed;
|
||||
|
||||
public event EventHandler<object> Opened;
|
||||
|
||||
public TaskbarButtonFlyoutTemplateSettings TemplateSettings
|
||||
{
|
||||
get => (TaskbarButtonFlyoutTemplateSettings)GetValue(TemplateSettingsProperty);
|
||||
set => SetValue(TemplateSettingsProperty, value);
|
||||
}
|
||||
|
||||
public bool IsOpen { get; private set; }
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if(container is not null)
|
||||
{
|
||||
container.Child = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApplyTemplate()
|
||||
{
|
||||
container = GetTemplateChild("Container") as Border;
|
||||
if (container != null)
|
||||
{
|
||||
child = container.Child;
|
||||
container.Child = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void ShowAt(TaskbarButtonFlyoutPlacement taskbarPlacement)
|
||||
{
|
||||
VisualStateManager.GoToState(this, "DefaultPlacement", true);
|
||||
|
||||
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
|
||||
|
||||
var width = child.DesiredSize.Width - 1;
|
||||
var height = child.DesiredSize.Height - 1;
|
||||
|
||||
TemplateSettings.SetValue(TaskbarButtonFlyoutTemplateSettings.HeightProperty, height);
|
||||
TemplateSettings.SetValue(TaskbarButtonFlyoutTemplateSettings.WidthProperty, width);
|
||||
|
||||
TemplateSettings.SetValue(TaskbarButtonFlyoutTemplateSettings.NegativeHeightProperty, -height);
|
||||
TemplateSettings.SetValue(TaskbarButtonFlyoutTemplateSettings.NegativeWidthProperty, -width);
|
||||
|
||||
VisualStateManager.GoToState(this, $"{taskbarPlacement}Placement", true);
|
||||
|
||||
container.Child = child;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user