Window
Window
is a top-level ContentControl
.
You will not usually create instances of the Window
class directly; instead the Window
class is usually sub-classed for each type of window to be shown by an application. For information on how to create new window classes from templates see the quickstart.
Common Properties
Property | Description |
---|---|
Title | The window title |
Icon | The window icon |
SizeToContent | Describes the window's auto-sizing behavior |
WindowState | The minimized/maximized state of the window |
Reference
Source code
The main window
The main window is the window passed to ApplicationLifetime.MainWindow
in the OnFrameworkInitializationCompleted
method of your your App.axaml.cs
file:
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktopLifetime)
{
desktopLifetime.MainWindow = new MainWindow();
}
}
It can be retrieved at any time by casting Application.ApplicationLifetime
IClassicDesktopStyleApplicationLifetime.
Mobile and browser platforms don't have a concept of Window in Avalonia. Instead you need to set MainView control in Application.ApplicationLifetime when it implements ISingleViewApplicationLifetime interface.
Show, hide and close a window
You can show a window using the Show
method:
var window = new MyWindow();
window.Show();
Windows can be closed using the Close
method. This has the same effect as when a user clicks the window's close button:
window.Close();
// A closed window cannot be shown.
window.Show();
Note that once a window has been closed, it cannot be shown again. If you want to re-show the window then you should use the Hide
method:
window.Hide();
// Window can now be shown again later
window.Show();
See also Prevent a window from closing
Show a window as a dialog
You can show a window as a modal dialog by calling the ShowDialog
method. ShowDialog
requires an owner window to be passed:
// Here we assume this code is executed from our current Window class and "this" object is a Window.
// Alternatively you can get global MainWindow from Application.ApplicationLifetime casted to IClassicDesktopStyleApplicationLifetime.
var ownerWindow = this;
var window = new MyWindow();
window.ShowDialog(ownerWindow);
The ShowDialog
method will return immediately. If you want to wait for the dialog to be closed, you can await
the call:
var window = new MyWindow();
await window.ShowDialog(ownerWindow);
Dialogs can return a result by calling the Close
method with an object. This result can then be read by the caller of ShowDialog
. For example:
public class MyDialog : Window
{
public MyDialog()
{
InitializeComponent();
}
private void OkButton_Click(object sender, EventArgs e)
{
Close("OK Clicked!");
}
}
var dialog = new MyDialog();
// The result is a string so call `ShowDialog<string>`.
var result = await dialog.ShowDialog<string>(ownerWindow);
Prevent a window from closing
A window can be prevented from closing by handling the Closing
event and setting e.Cancel = true
:
window.Closing += (s, e) =>
{
e.Cancel = true;
};
You could also hide the window instead. This allows the window to be re-shown after the user clicks the close button:
window.Closing += (s, e) =>
{
((Window)s).Hide();
e.Cancel = true;
};