A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

84 lines
2.9 KiB

using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Interactivity;
namespace ControlCatalog.Pages
{
public partial class DrawerPageBreakpointPage : UserControl
{
private bool _isLoaded;
public DrawerPageBreakpointPage()
{
InitializeComponent();
}
protected override void OnLoaded(RoutedEventArgs e)
{
base.OnLoaded(e);
_isLoaded = true;
DemoDrawer.PropertyChanged += OnDrawerPropertyChanged;
UpdateStatus();
}
protected override void OnUnloaded(RoutedEventArgs e)
{
base.OnUnloaded(e);
DemoDrawer.PropertyChanged -= OnDrawerPropertyChanged;
}
private void OnDrawerPropertyChanged(object? sender, Avalonia.AvaloniaPropertyChangedEventArgs e)
{
if (e.Property == DrawerPage.BoundsProperty)
UpdateStatus();
}
private void OnBreakpointChanged(object? sender, RangeBaseValueChangedEventArgs e)
{
if (!_isLoaded)
return;
var value = (int)e.NewValue;
DemoDrawer.DrawerBreakpointLength = value;
BreakpointText.Text = value.ToString();
UpdateStatus();
}
private void OnLayoutChanged(object? sender, SelectionChangedEventArgs e)
{
if (!_isLoaded)
return;
DemoDrawer.DrawerLayoutBehavior = LayoutCombo.SelectedIndex switch
{
0 => DrawerLayoutBehavior.Split,
1 => DrawerLayoutBehavior.CompactInline,
2 => DrawerLayoutBehavior.CompactOverlay,
_ => DrawerLayoutBehavior.Split
};
UpdateStatus();
}
private void OnMenuItemClick(object? sender, RoutedEventArgs e)
{
if (!_isLoaded || sender is not Button button)
return;
var item = button.Tag?.ToString() ?? "Home";
DetailTitleText.Text = item;
DetailPage.Header = item;
if (DemoDrawer.DrawerLayoutBehavior != DrawerLayoutBehavior.Split)
DemoDrawer.IsOpen = false;
}
private void UpdateStatus()
{
var isVertical = DemoDrawer.DrawerPlacement == DrawerPlacement.Top ||
DemoDrawer.DrawerPlacement == DrawerPlacement.Bottom;
var length = isVertical ? DemoDrawer.Bounds.Height : DemoDrawer.Bounds.Width;
var breakpoint = DemoDrawer.DrawerBreakpointLength;
WidthText.Text = $"{(isVertical ? "Height" : "Width")}: {(int)length} px";
var isOverlay = breakpoint > 0 && length > 0 && length < breakpoint;
ModeText.Text = isOverlay ?
"Mode: Overlay (below breakpoint)" :
$"Mode: {DemoDrawer.DrawerLayoutBehavior} (above breakpoint)";
}
}
}