Add Window.CanMinimize/CanMaximize (#18117)
* Add CanMinimize and CanMaximize to Window * Win32 impl for CanMinimize/CanMaximize * Add CanResize/CanMinimize/CanMaximize samples to control catalog * X11 impl for CanMinimize/CanMaximize * macOS impl for CanMinimize/CanMaximize * Win32: don't allow restore when the window isn't resizable * Additional documentation for CanMinimize/CanMaximize * Add CanMinimize/CanMaximize logic to CaptionButtons * Use START_COM_ARP_CALL * Added CanMinimize/CanMaximize integration tests * Fixed CanMaximize tests on macOS
This commit is contained in:
committed by
GitHub
parent
df578394f0
commit
1f8701a2fc
@@ -10,6 +10,9 @@
|
||||
ExtendClientAreaToDecorationsHint="{Binding ExtendClientAreaEnabled}"
|
||||
ExtendClientAreaChromeHints="{Binding ChromeHints}"
|
||||
ExtendClientAreaTitleBarHeightHint="{Binding TitleBarHeight}"
|
||||
CanResize="{Binding CanResize}"
|
||||
CanMinimize="{Binding CanMinimize}"
|
||||
CanMaximize="{Binding CanMaximize}"
|
||||
x:Name="MainWindow"
|
||||
Background="Transparent"
|
||||
x:Class="ControlCatalog.MainWindow" WindowState="{Binding WindowState, Mode=TwoWay}"
|
||||
|
||||
@@ -8,18 +8,55 @@
|
||||
x:DataType="viewModels:MainWindowViewModel"
|
||||
x:CompileBindings="True">
|
||||
<StackPanel>
|
||||
<StackPanel Spacing="10" Margin="25" IsEnabled="{OnFormFactor false, Desktop=true}">
|
||||
<TextBlock Classes="h2" Text="Desktop properties" Margin="4" />
|
||||
<CheckBox Content="Extend Client Area to Decorations" IsChecked="{Binding ExtendClientAreaEnabled}" />
|
||||
<CheckBox Content="Title Bar" IsChecked="{Binding SystemTitleBarEnabled}" />
|
||||
<CheckBox Content="Prefer System Chrome" IsChecked="{Binding PreferSystemChromeEnabled}" />
|
||||
<Slider Minimum="-1" Maximum="200" Value="{Binding TitleBarHeight}" />
|
||||
|
||||
<StackPanel
|
||||
Spacing="10"
|
||||
Margin="25"
|
||||
IsEnabled="{OnFormFactor false, Desktop=true}">
|
||||
|
||||
<TextBlock Classes="h2"
|
||||
Text="Desktop properties"
|
||||
Margin="4" />
|
||||
|
||||
<CheckBox Content="Extend Client Area to Decorations"
|
||||
IsChecked="{Binding ExtendClientAreaEnabled}" />
|
||||
|
||||
<DockPanel IsEnabled="{Binding ExtendClientAreaEnabled}">
|
||||
|
||||
<CheckBox Content="Title Bar"
|
||||
IsChecked="{Binding SystemTitleBarEnabled}"
|
||||
DockPanel.Dock="Left" />
|
||||
|
||||
<Slider Minimum="-1"
|
||||
Maximum="200"
|
||||
Value="{Binding TitleBarHeight}"
|
||||
IsEnabled="{Binding SystemTitleBarEnabled}"
|
||||
Margin="8,-10" />
|
||||
|
||||
</DockPanel>
|
||||
|
||||
<CheckBox Content="Prefer System Chrome"
|
||||
IsChecked="{Binding PreferSystemChromeEnabled}"
|
||||
IsEnabled="{Binding ExtendClientAreaEnabled}" />
|
||||
|
||||
<CheckBox Content="Can Resize"
|
||||
IsChecked="{Binding CanResize}" />
|
||||
|
||||
<CheckBox Content="Can Minimize"
|
||||
IsChecked="{Binding CanMinimize}" />
|
||||
|
||||
<CheckBox Content="Can Maximize"
|
||||
IsChecked="{Binding CanMaximize}"
|
||||
IsEnabled="{Binding CanResize}" />
|
||||
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Spacing="10" Margin="25" IsEnabled="{OnFormFactor false, Mobile=true}">
|
||||
<TextBlock Classes="h2" Text="Mobile properties" Margin="4" />
|
||||
<CheckBox Content="Is System Bar Visible" IsChecked="{Binding IsSystemBarVisible}" />
|
||||
<CheckBox Content="Display Edge To Edge" IsChecked="{Binding DisplayEdgeToEdge}" />
|
||||
<TextBlock Text="{Binding SafeAreaPadding, StringFormat='Safe Area Padding: {0}'}" />
|
||||
</StackPanel>
|
||||
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Controls.Notifications;
|
||||
using Avalonia.Dialogs;
|
||||
using Avalonia.Platform;
|
||||
using System;
|
||||
@@ -22,6 +21,9 @@ namespace ControlCatalog.ViewModels
|
||||
private bool _isSystemBarVisible;
|
||||
private bool _displayEdgeToEdge;
|
||||
private Thickness _safeAreaPadding;
|
||||
private bool _canResize;
|
||||
private bool _canMinimize;
|
||||
private bool _canMaximize;
|
||||
|
||||
public MainWindowViewModel()
|
||||
{
|
||||
@@ -49,7 +51,7 @@ namespace ControlCatalog.ViewModels
|
||||
WindowState.FullScreen,
|
||||
};
|
||||
|
||||
this.PropertyChanged += (s, e) =>
|
||||
PropertyChanged += (s, e) =>
|
||||
{
|
||||
if (e.PropertyName is nameof(SystemTitleBarEnabled) or nameof(PreferSystemChromeEnabled))
|
||||
{
|
||||
@@ -67,70 +69,104 @@ namespace ControlCatalog.ViewModels
|
||||
}
|
||||
};
|
||||
|
||||
SystemTitleBarEnabled = true;
|
||||
SystemTitleBarEnabled = true;
|
||||
TitleBarHeight = -1;
|
||||
CanResize = true;
|
||||
CanMinimize = true;
|
||||
CanMaximize = true;
|
||||
}
|
||||
|
||||
public ExtendClientAreaChromeHints ChromeHints
|
||||
{
|
||||
get { return _chromeHints; }
|
||||
set { this.RaiseAndSetIfChanged(ref _chromeHints, value); }
|
||||
set { RaiseAndSetIfChanged(ref _chromeHints, value); }
|
||||
}
|
||||
|
||||
public bool ExtendClientAreaEnabled
|
||||
{
|
||||
get { return _extendClientAreaEnabled; }
|
||||
set { this.RaiseAndSetIfChanged(ref _extendClientAreaEnabled, value); }
|
||||
set
|
||||
{
|
||||
if (RaiseAndSetIfChanged(ref _extendClientAreaEnabled, value) && !value)
|
||||
{
|
||||
SystemTitleBarEnabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool SystemTitleBarEnabled
|
||||
{
|
||||
get { return _systemTitleBarEnabled; }
|
||||
set { this.RaiseAndSetIfChanged(ref _systemTitleBarEnabled, value); }
|
||||
set
|
||||
{
|
||||
if (RaiseAndSetIfChanged(ref _systemTitleBarEnabled, value) && !value)
|
||||
{
|
||||
TitleBarHeight = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool PreferSystemChromeEnabled
|
||||
{
|
||||
get { return _preferSystemChromeEnabled; }
|
||||
set { this.RaiseAndSetIfChanged(ref _preferSystemChromeEnabled, value); }
|
||||
set { RaiseAndSetIfChanged(ref _preferSystemChromeEnabled, value); }
|
||||
}
|
||||
|
||||
public double TitleBarHeight
|
||||
{
|
||||
get { return _titleBarHeight; }
|
||||
set { this.RaiseAndSetIfChanged(ref _titleBarHeight, value); }
|
||||
set { RaiseAndSetIfChanged(ref _titleBarHeight, value); }
|
||||
}
|
||||
|
||||
public WindowState WindowState
|
||||
{
|
||||
get { return _windowState; }
|
||||
set { this.RaiseAndSetIfChanged(ref _windowState, value); }
|
||||
set { RaiseAndSetIfChanged(ref _windowState, value); }
|
||||
}
|
||||
|
||||
public WindowState[] WindowStates
|
||||
{
|
||||
get { return _windowStates; }
|
||||
set { this.RaiseAndSetIfChanged(ref _windowStates, value); }
|
||||
set { RaiseAndSetIfChanged(ref _windowStates, value); }
|
||||
}
|
||||
|
||||
public bool IsSystemBarVisible
|
||||
{
|
||||
get { return _isSystemBarVisible; }
|
||||
set { this.RaiseAndSetIfChanged(ref _isSystemBarVisible, value); }
|
||||
set { RaiseAndSetIfChanged(ref _isSystemBarVisible, value); }
|
||||
}
|
||||
|
||||
public bool DisplayEdgeToEdge
|
||||
{
|
||||
get { return _displayEdgeToEdge; }
|
||||
set { this.RaiseAndSetIfChanged(ref _displayEdgeToEdge, value); }
|
||||
set { RaiseAndSetIfChanged(ref _displayEdgeToEdge, value); }
|
||||
}
|
||||
|
||||
public Thickness SafeAreaPadding
|
||||
{
|
||||
get { return _safeAreaPadding; }
|
||||
set { this.RaiseAndSetIfChanged(ref _safeAreaPadding, value); }
|
||||
set { RaiseAndSetIfChanged(ref _safeAreaPadding, value); }
|
||||
}
|
||||
|
||||
public bool CanResize
|
||||
{
|
||||
get { return _canResize; }
|
||||
set { RaiseAndSetIfChanged(ref _canResize, value); }
|
||||
}
|
||||
|
||||
public bool CanMinimize
|
||||
{
|
||||
get { return _canMinimize; }
|
||||
set { RaiseAndSetIfChanged(ref _canMinimize, value); }
|
||||
}
|
||||
|
||||
public bool CanMaximize
|
||||
{
|
||||
get { return _canMaximize; }
|
||||
set { RaiseAndSetIfChanged(ref _canMaximize, value); }
|
||||
}
|
||||
|
||||
|
||||
public MiniCommand AboutCommand { get; }
|
||||
|
||||
public MiniCommand ExitCommand { get; }
|
||||
@@ -144,7 +180,7 @@ namespace ControlCatalog.ViewModels
|
||||
public DateTime? ValidatedDateExample
|
||||
{
|
||||
get => _validatedDateExample;
|
||||
set => this.RaiseAndSetIfChanged(ref _validatedDateExample, value);
|
||||
set => RaiseAndSetIfChanged(ref _validatedDateExample, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,14 +30,16 @@
|
||||
</ComboBox>
|
||||
<CheckBox Name="ShowWindowExtendClientAreaToDecorationsHint">ExtendClientAreaToDecorationsHint</CheckBox>
|
||||
<CheckBox Name="ShowWindowCanResize" IsChecked="True">Can Resize</CheckBox>
|
||||
<CheckBox Name="ShowWindowCanMinimize" IsChecked="True">Can Minimize</CheckBox>
|
||||
<CheckBox Name="ShowWindowCanMaximize" IsChecked="True">Can Maximize</CheckBox>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<Button Name="ShowWindow" Click="ShowWindow_Click">Show Window</Button>
|
||||
<Button Name="SendToBack" Click="SendToBack_Click">Send to Back</Button>
|
||||
<Button Name="EnterFullscreen" Click="EnterFullscreen_Click">Enter Fullscreen</Button>
|
||||
<Button Name="ExitFullscreen" Click="ExitFullscreen_Click">Exit Fullscreen</Button>
|
||||
<Button Name="RestoreAll" Click="RestoreAll_Click">Restore All</Button>
|
||||
<Button Name="ShowTopmostWindow" Click="ShowTopmostWindow_Click">Show Topmost Window</Button>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<Button Name="ShowTransparentWindow" Click="ShowTransparentWindow_Click">Transparent Window</Button>
|
||||
<Button Name="ShowTransparentPopup" Click="ShowTransparentPopup_Click">Transparent Popup</Button>
|
||||
</StackPanel>
|
||||
|
||||
@@ -23,10 +23,13 @@ public partial class WindowPage : UserControl
|
||||
private void ShowWindow_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var size = !string.IsNullOrWhiteSpace(ShowWindowSize.Text) ? Size.Parse(ShowWindowSize.Text) : (Size?)null;
|
||||
var canResize = ShowWindowCanResize.IsChecked ?? false;
|
||||
var window = new ShowWindowTest
|
||||
{
|
||||
WindowStartupLocation = (WindowStartupLocation)ShowWindowLocation.SelectedIndex,
|
||||
CanResize = ShowWindowCanResize.IsChecked ?? false,
|
||||
CanResize = canResize,
|
||||
CanMinimize = ShowWindowCanMinimize.IsChecked ?? false,
|
||||
CanMaximize = canResize && (ShowWindowCanMaximize.IsChecked ?? false)
|
||||
};
|
||||
|
||||
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime lifetime)
|
||||
|
||||
Reference in New Issue
Block a user