csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
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
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)";
|
|
}
|
|
}
|
|
}
|
|
|