Přehled windows WPF
Uživatelé pracují se samostatnými aplikacemi WPF (Windows Presentation Foundation) prostřednictvím oken. Primárním účelem okna je hostovat obsah, který vizualizuje data a umožňuje uživatelům pracovat s daty. Samostatné aplikace WPF poskytují vlastní okna pomocí třídy Window. Toto téma představuje Window před pokrytím základů vytváření a správy oken v samostatných aplikacích.
Poznámka
Aplikace WPF hostované v prohlížeči, včetně aplikací prohlížeče XAML (XBAPs) a volných stránek XAML (Extensible Application Markup Language), neposkytují vlastní okna. Místo toho jsou hostované v oknech poskytovaných aplikací Windows Internet Explorer. Viz Přehled aplikací prohlížeče WPF XAML.
Třída okna
Následující obrázek znázorňuje základní části okna:
Okno je rozděleno do dvou oblastí: neklientská oblast a oblast klienta.
WPF implementuje neklientskou oblast okna, která zahrnuje části společné pro většinu oken, včetně následujících:
Ohraničení.
Záhlaví.
Ikona.
Tlačítka Minimalizovat, Maximalizovat a Obnovit
Tlačítko Zavřít
Systémová nabídka s položkami nabídek, které uživatelům umožňují minimalizovat, maximalizovat, obnovit, přesunout, změnit velikost a zavřít okno.
Oblast klienta okna je oblast v oblasti, která není klientem okna, a používá ji vývojáři k přidání obsahu specifického pro aplikaci, jako jsou pruhy nabídek, panely nástrojů a ovládací prvky.
Ve WPF je okno zapouzdřeno Window třídou, kterou používáte k provedení následujících kroků:
Zobrazení okna
Nakonfigurujte velikost, umístění a vzhled okna.
Hostování obsahu specifického pro aplikaci
Umožňuje spravovat dobu života okna.
Implementování okna
Implementace typického okna se skládá z vzhledu i chování, kdy vzhled definuje, jak okno vypadá uživatelům a chování definuje způsob, jakým okno funguje, když s ním uživatelé pracují. Ve WPF můžete implementovat vzhled a chování okna pomocí kódu nebo kódu XAML.
Obecně se ale vzhled okna implementuje pomocí kódu XAML a jeho chování se implementuje pomocí kódu na pozadí, jak je znázorněno v následujícím příkladu.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.MarkupAndCodeBehindWindow">
<!-- Client area (for content) -->
</Window>
using System.Windows;
namespace SDKSample
{
public partial class MarkupAndCodeBehindWindow : Window
{
public MarkupAndCodeBehindWindow()
{
InitializeComponent();
}
}
}
Imports System.Windows
Namespace SDKSample
Partial Public Class MarkupAndCodeBehindWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
End Class
End Namespace
Pokud chcete povolit spolupráci XAML souboru s označovacím jazykem a souboru s kódem na pozadí, jsou požadovány následující věci:
V kódu musí prvek
Window
obsahovat atributx:Class
. Když je aplikace sestavena, existencex:Class
v souboru značek způsobí, že modul sestavení Microsoftu (MSBuild) vytvořípartial
třídu, která je odvozena z Window a má název, který je určen atributemx:Class
. To vyžaduje přidání deklarace oboru názvů XML pro schéma XAML (xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
). Vygenerovanápartial
třída implementujeInitializeComponent
metodu, která je volána k registraci událostí a nastavení vlastností implementovaných v kódu.V kódu na pozadí musí být třída
partial
třídou se stejným názvem, který je určen atributemx:Class
ve značkovacím jazyce, a musí dědit z Window. To umožňuje přidružit soubor kódu na pozadí k třídoupartial
, který je generován pro soubor značek při sestavení aplikace (viz Sestavení aplikace WPF).V kódu na pozadí musí třída Window implementovat konstruktor, který volá metodu
InitializeComponent
.InitializeComponent
je implementována vygenerovanou třídoupartial
souboru značkování pro registraci událostí a nastavení vlastností definovaných ve značkování.
Poznámka
Když do svého projektu pomocí sady Visual Studio přidáte nový Window, Window se implementuje pomocí značky i kódu na pozadí a zahrnuje potřebnou konfiguraci k vytvoření asociace mezi značkou a soubory s kódem na pozadí, jak je popsáno zde.
S touto konfigurací se můžete zaměřit na definování vzhledu okna v kódu XAML a implementaci jeho chování v kódu. Následující příklad ukazuje okno s tlačítkem, implementovaným ve značkovacím jazyce XAML a obslužnou rutinou pro událost Click tlačítka implementovanou v kódu.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.MarkupAndCodeBehindWindow">
<!-- Client area (for content) -->
<Button Click="button_Click">Click This Button</Button>
</Window>
using System.Windows;
namespace SDKSample
{
public partial class MarkupAndCodeBehindWindow : Window
{
public MarkupAndCodeBehindWindow()
{
InitializeComponent();
}
void button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Button was clicked.");
}
}
}
Imports System.Windows
Namespace SDKSample
Partial Public Class MarkupAndCodeBehindWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
MessageBox.Show("Button was clicked.")
End Sub
End Class
End Namespace
Konfigurace definice okna pro MSBuild
Způsob implementace okna určuje, jak je nakonfigurovaný pro nástroj MSBuild. Pro okno, které je definováno pomocí XAML značkování i kódu:
Soubory značek XAML jsou nakonfigurovány jako položky MSBuild
Page
.Soubory za kódem jsou nakonfigurované jako položky nástroje MSBuild
Compile
.
To je vidět v následujícím souboru projektu MSBuild.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ... >
...
<Page Include="MarkupAndCodeBehindWindow.xaml" />
<Compile Include=" MarkupAndCodeBehindWindow.xaml.cs" />
...
</Project>
Informace o vytváření aplikací WPF naleznete v tématu Sestavení aplikace WPF.
Životnost okna
Stejně jako u jakékoli třídy má okno životnost, která začíná při prvním vytvoření instance, po kterém se otevře, aktivuje a deaktivuje a nakonec zavře.
Otevření okna
Pokud chcete otevřít okno, nejprve vytvoříte jeho instanci, což je znázorněno v následujícím příkladu.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
Startup="app_Startup">
</Application>
using System.Windows;
namespace SDKSample
{
public partial class App : Application
{
void app_Startup(object sender, StartupEventArgs e)
{
// Create a window
MarkupAndCodeBehindWindow window = new MarkupAndCodeBehindWindow();
// Open a window
window.Show();
}
}
}
V tomto příkladu se vytvoří instance MarkupAndCodeBehindWindow
při spuštění aplikace, ke které dojde při vyvolání události Startup.
Při vytváření instance okna se automaticky přidá odkaz na seznam oken spravovaných objektem Application (viz Application.Windows). Kromě toho je první okno, které má být instancováno, standardně nastaveno Application jako hlavní okno aplikace (viz Application.MainWindow).
Okno se konečně otevře voláním metody Show; výsledek je znázorněn na následujícím obrázku.
Okno otevřené voláním Show je bezmodální okno, což znamená, že aplikace funguje v režimu, který uživatelům umožňuje aktivovat jiná okna ve stejné aplikaci.
Poznámka
ShowDialog je volána k modálnímu otevření okna, například dialogového okna. Další informace najdete v tématu Dialogová okna – přehled.
Když se volá Show, okno provede inicializační práce před svým zobrazením, aby vytvořilo infrastrukturu umožňující přijímat uživatelský vstup. Při inicializaci okna se vyvolá událost SourceInitialized a zobrazí se okno.
Jako zkratku lze StartupUri nastavit tak, aby určovalo první okno, které se při spuštění aplikace automaticky otevře.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
StartupUri="PlainWindow.xaml" />
Při spuštění aplikace se okno určené hodnotou StartupUri otevře nemodálně; okno se otevře voláním své metody Show.
Vlastnictví okna
Okno otevřené pomocí metody Show nemá implicitní relaci s oknem, které ho vytvořilo; uživatelé mohou interagovat s některým oknem nezávisle na druhém, což znamená, že každé okno může provádět následující akce:
Zakryjte ostatní (pokud některá z oken nemá vlastnost Topmost nastavenou na
true
).Minimalizovat, maximalizovat a obnovit lze, aniž by to mělo vliv na ostatní.
Některá okna vyžadují relaci s oknem, které je otevře. Například aplikace integrovaného vývojového prostředí (IDE) může otevřít okna vlastností a okna nástrojů, jejichž typické chování je pokrytí okna, které je vytvoří. Kromě toho by se tato okna měla vždy zavřít, minimalizovat, maximalizovat a obnovit v souladu s oknem, které je vytvořilo. Takovou relaci lze vytvořit tak, že jedno okno vlastní jiný a dosáhnete tak, že nastavíte vlastnost Owner okna vlastněného okna s odkazem na okno vlastníka . To je znázorněno v následujícím příkladu.
// Create a window and make this window its owner
Window ownedWindow = new Window();
ownedWindow.Owner = this;
ownedWindow.Show();
' Create a window and make this window its owner
Dim ownedWindow As New Window()
ownedWindow.Owner = Me
ownedWindow.Show()
Po vytvoření vlastnictví:
Vlastní okno může odkazovat na okno vlastníka kontrolou hodnoty vlastnosti Owner.
Okno vlastníka může zjistit všechna okna, která vlastní, kontrolou hodnoty své vlastnosti OwnedWindows.
Zabránění aktivaci okna
Existují scénáře, kdy by se okna neměla aktivovat, když se zobrazí, například okna konverzace v aplikaci typu Internet messenger nebo okna oznámení e-mailové aplikace.
Pokud má vaše aplikace okno, které by se při prvním zobrazení nemělo aktivovat, můžete jeho vlastnost ShowActivated nastavit na false
před prvním voláním metody Show. V důsledku toho:
Okno není aktivováno.
Událost Activated okna není vyvolána.
Aktuálně aktivované okno zůstane aktivní.
Okno se stane aktivním, jakmile ho uživatel aktivuje kliknutím na klientskou nebo neklientskou oblast. V tomto případě:
Okno je aktivováno.
Událost okna Activated je vyvolána.
Dříve aktivované okno se deaktivuje.
Události Deactivated a Activated okna jsou následně vyvolány podle očekávání jako reakce na akci uživatele.
Aktivace okna
Když je okno poprvé otevřené, stane se aktivním oknem (pokud se nezobrazí s ShowActivated nastaveným na false
).
aktivní okno je okno, které aktuálně zaznamenává vstup uživatele, například stisknutí kláves a kliknutí myší. Když se okno aktivuje, vyvolá událost Activated.
Poznámka
Při prvním otevření okna se události Loaded a ContentRendered vyvolá až po vyvolání události Activated. S ohledem na to lze okno efektivně považovat za otevřené, když je ContentRendered vyvolána.
Po aktivaci okna může uživatel aktivovat jiné okno ve stejné aplikaci nebo aktivovat jinou aplikaci. Když k tomu dojde, aktivní okno se deaktivuje a vyvolá Deactivated událost. Podobně když uživatel vybere aktuálně deaktivované okno, okno se znovu aktivuje a Activated se vyvolá.
Jedním z běžných důvodů, proč zpracovávat Activated a Deactivated, je povolit a zakázat funkce, které se dají spustit jenom v době, kdy je okno aktivní. Některá okna například zobrazují interaktivní obsah, který vyžaduje konstantní vstup uživatele nebo pozornost, včetně her a přehrávačů videa. Následující příklad je zjednodušený video přehrávač, který ukazuje, jak zpracovat Activated a Deactivated, tak aby se implementovalo toto chování.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.CustomMediaPlayerWindow"
Activated="window_Activated"
Deactivated="window_Deactivated">
<!-- Media Player -->
<MediaElement
Name="mediaElement"
Stretch="Fill"
LoadedBehavior="Manual"
Source="numbers.wmv" />
</Window>
using System;
using System.Windows;
namespace SDKSample
{
public partial class CustomMediaPlayerWindow : Window
{
public CustomMediaPlayerWindow()
{
InitializeComponent();
}
void window_Activated(object sender, EventArgs e)
{
// Recommence playing media if window is activated
this.mediaElement.Play();
}
void window_Deactivated(object sender, EventArgs e)
{
// Pause playing if media is being played and window is deactivated
this.mediaElement.Pause();
}
}
}
Imports System.Windows
Namespace SDKSample
Partial Public Class CustomMediaPlayerWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub window_Activated(ByVal sender As Object, ByVal e As EventArgs)
' Recommence playing media if window is activated
Me.mediaElement.Play()
End Sub
Private Sub window_Deactivated(ByVal sender As Object, ByVal e As EventArgs)
' Pause playing if media is being played and window is deactivated
Me.mediaElement.Pause()
End Sub
End Class
End Namespace
Jiné typy aplikací můžou při deaktivaci okna dál spouštět kód na pozadí. Poštovní klient může například pokračovat v dotazování poštovního serveru, zatímco uživatel používá jiné aplikace. Aplikace, jako jsou tyto, často poskytují jiné nebo další chování při deaktivaci hlavního okna. Pokud jde o poštovní program, může to znamenat přidání nové položky pošty do složky Doručená pošta a přidání ikony oznámení do hlavního panelu systému. Ikona oznámení se musí zobrazit jenom v případě, že okno pošty není aktivní, což je možné určit kontrolou vlastnosti IsActive.
Pokud se úloha na pozadí dokončí, okno může uživatele informovat naléhavěji voláním Activate metody. Pokud uživatel pracuje s jinou aplikací aktivovanou při zavolání Activate, tlačítko hlavního panelu okna bliká. Pokud uživatel pracuje s aktuální aplikací, volání Activate přenese okno do popředí.
Poznámka
Aktivaci rozsahu aplikace můžete zpracovat pomocí Application.Activated a Application.Deactivated událostí.
Zavření okna
Život okna začíná docházet na konec, když ho uživatel zavře. Okno lze zavřít pomocí prvků v oblasti, která není klientem, včetně následujících:
Položka
Zavřít nabídky systému. Stiskněte kombinaci kláves ALT+F4.
Stisknutí tlačítka Zavřít.
Můžete poskytnout klientské oblasti další mechanismy pro zavření okna, z nichž běžnější zahrnují následující:
Položka
Ukončit v nabídce souboru, obvykle pro hlavní okna aplikací. Položka Zavřít v nabídce Soubor, typicky v sekundárním okně aplikace.
Tlačítko Zrušit, obvykle na modálním dialogovém okně.
Tlačítko Zavřít, obvykle v nemodálním dialogovém okně.
Pokud chcete okno zavřít v reakci na některý z těchto vlastních mechanismů, musíte volat metodu Close. Následující příklad implementuje možnost zavřít okno výběrem Exit v nabídce File.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.WindowWithFileExit">
<Menu>
<MenuItem Header="_File">
<MenuItem Header="E_xit" Click="fileExitMenuItem_Click" />
</MenuItem>
</Menu>
</Window>
using System.Windows;
namespace SDKSample
{
public partial class WindowWithFileExit : System.Windows.Window
{
public WindowWithFileExit()
{
InitializeComponent();
}
void fileExitMenuItem_Click(object sender, RoutedEventArgs e)
{
// Close this window
this.Close();
}
}
}
Imports System.Windows
Namespace SDKSample
Partial Public Class WindowWithFileExit
Inherits System.Windows.Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub fileExitMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' Close this window
Me.Close()
End Sub
End Class
End Namespace
Když se okno zavře, vyvolá dvě události: Closing a Closed.
Closing je vyvolána před zavřením okna a poskytuje mechanismus, kterým lze zabránit uzavření okna. Jedním z běžných důvodů, proč zabránit zavření okna, je, že obsah okna obsahuje upravená data. V této situaci lze Closing událost zpracovat, aby se zjistilo, jestli jsou data zašpiněná, a pokud ano, požádejte uživatele, zda má pokračovat v zavření okna bez uložení dat nebo zrušení uzavření okna. Následující příklad ukazuje klíčové aspekty zpracování Closing.
using System; // EventArgs
using System.ComponentModel; // CancelEventArgs
using System.Windows; // window
namespace CSharp
{
public partial class DataWindow : Window
{
// Is data dirty
bool isDataDirty = false;
public DataWindow()
{
InitializeComponent();
}
void documentTextBox_TextChanged(object sender, EventArgs e)
{
this.isDataDirty = true;
}
void DataWindow_Closing(object sender, CancelEventArgs e)
{
MessageBox.Show("Closing called");
// If data is dirty, notify user and ask for a response
if (this.isDataDirty)
{
string msg = "Data is dirty. Close without saving?";
MessageBoxResult result =
MessageBox.Show(
msg,
"Data App",
MessageBoxButton.YesNo,
MessageBoxImage.Warning);
if (result == MessageBoxResult.No)
{
// If user doesn't want to close, cancel closure
e.Cancel = true;
}
}
}
}
}
Imports System ' EventArgs
Imports System.ComponentModel ' CancelEventArgs
Imports System.Windows ' window
Namespace VisualBasic
Partial Public Class DataWindow
Inherits Window
' Is data dirty
Private isDataDirty As Boolean = False
Public Sub New()
InitializeComponent()
End Sub
Private Sub documentTextBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
Me.isDataDirty = True
End Sub
Private Sub DataWindow_Closing(ByVal sender As Object, ByVal e As CancelEventArgs)
MessageBox.Show("Closing called")
' If data is dirty, notify user and ask for a response
If Me.isDataDirty Then
Dim msg As String = "Data is dirty. Close without saving?"
Dim result As MessageBoxResult = MessageBox.Show(msg, "Data App", MessageBoxButton.YesNo, MessageBoxImage.Warning)
If result = MessageBoxResult.No Then
' If user doesn't want to close, cancel closure
e.Cancel = True
End If
End If
End Sub
End Class
End Namespace
Při obsluze události Closing se předá CancelEventArgs, která implementuje vlastnost Boolean
Cancel. Tuto vlastnost nastavíte na true
, abyste zabránili zavření okna.
Pokud Closing není zpracován, nebo je zpracován, ale není zrušen, okno se zavře. Těsně před tím, než se okno skutečně zavře, je vyvoláno Closed. V tomto okamžiku nelze zabránit zavření okna.
Poznámka
Aplikaci je možné nakonfigurovat tak, aby se automaticky vypnula, když se zavře hlavní okno aplikace (viz MainWindow) nebo se zavře poslední okno. Podrobnosti najdete v ShutdownMode.
I když je možné okno explicitně uzavřít prostřednictvím mechanismů poskytovaných v jiných klientských a klientských oblastech, okno může být implicitně uzavřeno také v důsledku chování v jiných částech aplikace nebo Windows, včetně následujících:
Uživatel se odhlásí nebo vypne Systém Windows.
Majitel okna zavře okno (viz Owner).
Hlavní okno aplikace je zavřeno a ShutdownMode je OnMainWindowClose.
Shutdown se volá.
Poznámka
Po zavření nelze okno znovu otevřít.
Události životního cyklu okna
Následující obrázek znázorňuje posloupnost hlavních událostí v době životnosti okna:
Následující obrázek znázorňuje posloupnost hlavních událostí v době životnosti okna, které se zobrazuje bez aktivace (ShowActivated je nastavena na false
před zobrazením okna):
Umístění okna
Když je okno otevřené, má polohu v osách x a y vzhledem k ploše. Toto umístění lze určit kontrolou vlastností Left a Top. Tyto vlastnosti můžete nastavit tak, aby se změnilo umístění okna.
Můžete také určit počáteční umístění Window při prvním zobrazení nastavením vlastnosti WindowStartupLocation s jednou z následujících hodnot výčtu WindowStartupLocation:
CenterOwner (výchozí)
Pokud je spouštěcí umístění zadáno jako Manuala vlastnosti Left a Top nebyly nastaveny, Window požádá systém Windows o umístění, ve kterých se má zobrazit.
Nejvyšší okna a Z-pořadí
Kromě umístění x a y má okno také umístění v rozměru z, které určuje jeho svislou polohu s ohledem na ostatní okna. To se označuje jako pořadí podle osy z a existují dva typy: běžné pořadí osy z a nejvyšší pořadí osy z. Umístění okna v normální pořadí vykreslování je určeno, zda je aktuálně aktivní nebo ne. Ve výchozím nastavení se okno nachází v normálním z-pořadí vykreslování. Umístění okna v pořadí vykreslování nejvyšší je také určeno podle toho, zda je aktuálně aktivní. Kromě toho jsou okna v nejvyšším z-řádu vždy umístěna nad okny v normálním z-řádu. Okno je umístěno do nejvyššího z-řádu nastavením jeho vlastnosti Topmost na true
.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Topmost="True">
</Window>
V každém pořadí vykreslování se aktuálně aktivní okno zobrazí nad všemi ostatními okny ve stejném pořadí vykreslování.
Velikost okna
Kromě umístění na ploše má okno velikost určenou několika vlastnostmi, včetně různých vlastností šířky a výšky a SizeToContent.
MinWidth, Widtha MaxWidth slouží ke správě rozsahu šířek, které okno může mít během své životnosti, a jsou nakonfigurované, jak je znázorněno v následujícím příkladu.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
MinWidth="300" Width="400" MaxWidth="500">
</Window>
Výšku okna spravuje MinHeight, Heighta MaxHeighta konfiguruje se tak, jak je znázorněno v následujícím příkladu.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
MinHeight="300" Height="400" MaxHeight="500">
</Window>
Vzhledem k tomu, že různé hodnoty šířky a výšky každé určují rozsah, je možné, aby šířka a výška okna s možností změny velikosti byla kdekoli v zadaném rozsahu pro příslušnou dimenzi. Chcete-li zjistit jeho aktuální šířku a výšku, zkontrolujte ActualWidth a ActualHeightv uvedeném pořadí.
Pokud chcete, aby šířka a výška okna měla velikost odpovídající velikosti obsahu okna, můžete použít vlastnost SizeToContent, která má následující hodnoty:
Manual. Žádný efekt (výchozí).
Width. Přizpůsobit na šířku obsahu, což má stejný účinek jako nastavení MinWidth a MaxWidth na šířku obsahu.
Height. Přizpůsobit výšce obsahu, což má stejný účinek jako nastavení MinHeight i MaxHeight na výšku obsahu.
WidthAndHeight. Přizpůsobit šířce a výšce obsahu, což má stejný účinek jako nastavení MinHeight i MaxHeight na výšku obsahu a nastavení MinWidth i MaxWidth na šířku obsahu.
Následující příklad ukazuje okno, které automaticky přizpůsobí jeho obsah svisle i vodorovně při prvním zobrazení.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
SizeToContent="WidthAndHeight">
</Window>
Následující příklad ukazuje, jak nastavit vlastnost SizeToContent v kódu tak, aby určovala způsob, jakým se okno přizpůsobuje svému obsahu.
// Manually alter window height and width
this.SizeToContent = SizeToContent.Manual;
// Automatically resize width relative to content
this.SizeToContent = SizeToContent.Width;
// Automatically resize height relative to content
this.SizeToContent = SizeToContent.Height;
// Automatically resize height and width relative to content
this.SizeToContent = SizeToContent.WidthAndHeight;
' Manually alter window height and width
Me.SizeToContent = SizeToContent.Manual
' Automatically resize width relative to content
Me.SizeToContent = SizeToContent.Width
' Automatically resize height relative to content
Me.SizeToContent = SizeToContent.Height
' Automatically resize height and width relative to content
Me.SizeToContent = SizeToContent.WidthAndHeight
Pořadí přednosti pro vlastnosti určující velikost
V podstatě se vlastnosti různých velikostí okna kombinují, aby definovaly rozsah šířky a výšky pro přizpůsobitelné okno. Pokud chcete zajistit zachování platného rozsahu, Window vyhodnotí hodnoty vlastností velikosti pomocí následujících pořadí priorit.
pro vlastnosti výšky:
pro vlastnosti šířky:
Pořadí priorit může také určit velikost okna při maximalizaci, která se spravuje pomocí vlastnosti WindowState.
Stav okna
Během životnosti okna s možností změny velikosti může mít tři stavy: normální, minimalizované a maximalizované. Okno s normálním stavem je výchozím stavem okna. Okno s tímto stavem umožňuje uživateli přesunout ho a změnit jeho velikost pomocí úchytu pro změnu velikosti nebo ohraničení, pokud je možné změnit velikost.
Okno s minimalizovaným stavem se sbalí na tlačítko hlavního panelu, pokud je ShowInTaskbar nastavena na true
; v opačném případě se sbalí na nejmenší možnou velikost a přemístí se do levého dolního rohu plochy. Žádný typ minimalizovaného okna nelze změnit pomocí ohraničení nebo úchytu pro změnu velikosti, i když minimalizované okno, které se nezobrazuje na hlavním panelu, lze přetáhnout po ploše.
Okno ve stavu maximalizovaném se rozšíří na maximální velikost, které může dosáhnout, což bude přesně tak velké, jak jeho vlastnosti MaxWidth, MaxHeighta SizeToContent dovolí. Stejně jako minimalizované okno nelze změnit velikost maximalizovaného okna přetažením úchytu nebo přetažením ohraničení.
Poznámka
Hodnoty Top, Left, Widtha Height vlastností okna vždy představují hodnoty pro normální stav, i když je okno aktuálně maximalizované nebo minimalizované.
Stav okna lze nakonfigurovat nastavením vlastnosti WindowState, která může mít jednu z následujících WindowState hodnot výčtu:
Následující příklad ukazuje, jak vytvořit okno, které se zobrazí jako maximalizované při otevření.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
WindowState="Maximized">
</Window>
Obecně byste měli nastavit WindowState tak, aby nakonfigurovali počáteční stav okna. Jakmile se zobrazí okno s možností změny velikosti, můžou uživatelé stisknout tlačítka pro minimalizaci, maximalizaci a obnovení v záhlaví okna a změnit tak stav okna.
Vzhled okna
Vzhled klientské oblasti okna změníte přidáním obsahu specifického pro okno, jako jsou tlačítka, popisky a textová pole. Pokud chcete nakonfigurovat oblast, která není klientem, Window poskytuje několik vlastností, mezi které patří Icon k nastavení ikony okna a Title nastavit její název.
Vzhled a chování ohraničení mimo klientskou oblast můžete také změnit tak, že nakonfigurujete režim změny velikosti okna, styl okna a to, jestli se zobrazí jako tlačítko na hlavním panelu plochy.
Režim změny velikosti
V závislosti na vlastnosti WindowStyle můžete určit, jak (a jestli) uživatelé můžou změnit velikost okna. Volba stylu okna má vliv na to, zda uživatel může změnit velikost okna přetažením jeho ohraničení myší, zda Minimalizovat, Maximalizovata Změnit velikost tlačítka se zobrazí v oblasti, která nejsou klientská, a pokud se zobrazí, jestli jsou povolená.
Způsob změny velikosti okna můžete nakonfigurovat nastavením jeho vlastnosti ResizeMode, což může být jedna z následujících hodnot výčtu ResizeMode:
CanResize (výchozí)
Stejně jako u WindowStylese režim změny velikosti okna pravděpodobně během jeho životnosti nezmění, což znamená, že ho pravděpodobně nastavíte z kódu XAML.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
ResizeMode="CanResizeWithGrip">
</Window>
Všimněte si, že pomocí kontroly vlastnosti WindowState můžete zjistit, jestli je okno maximalizované, minimalizované nebo obnovené.
Styl okna
Hraniční čára viditelná z neklientské oblasti okna je vhodná pro většinu aplikací. Existují však okolnosti, kdy jsou potřeba různé typy ohraničení nebo nejsou vůbec potřeba žádné ohraničení v závislosti na typu okna.
Chcete-li kontrolovat, jaký typ ohraničení okno získá, vlastnost WindowStyle nastavte pomocí jedné z následujících hodnot výčtu WindowStyle.
SingleBorderWindow (výchozí)
Efekt těchto stylů oken je znázorněn na následujícím obrázku:
Můžete nastavit WindowStyle pomocí značek XAML nebo kódu; protože během životnosti okna se pravděpodobně nezmění, nejspíše jej nastavíte pomocí značek XAML.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
WindowStyle="ToolWindow">
</Window>
Styl okna bez obdélníku
Existují také situace, kdy styly ohraničení, které WindowStyle umožňují, nejsou dostatečné. Můžete například chtít vytvořit aplikaci s neúúhledovým ohraničením, jako je microsoft Windows Media Player.
Představte si například okno bublin řeči zobrazené na následujícím obrázku:
Tento typ okna lze vytvořit nastavením vlastnosti WindowStyle na Nonea využitím speciální podpory, kterou Window nabízí pro transparentnost.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
WindowStyle="None"
AllowsTransparency="True"
Background="Transparent">
</Window>
Tato kombinace hodnot dává okně pokyn, aby se vykresloval zcela průhledně. V tomto stavu nelze použít prvky ne-klientské oblasti okna (nabídku Zavřít a tlačítka Minimalizovat, Maximalizovat a Obnovit atd.). V důsledku toho musíte zadat vlastní.
Přítomnost na hlavním panelu
Výchozí vzhled okna obsahuje tlačítko hlavního panelu, podobně jako na následujícím obrázku:
Některé typy oken nemají tlačítko hlavního panelu, například pole zpráv a dialogová okna (viz Dialogová okna – přehled). Nastavení vlastnosti ShowInTaskbar (ve výchozím nastavenítrue
) můžete určit, zda je tlačítko panelu úloh pro okno zobrazeno.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
ShowInTaskbar="False">
</Window>
Důležité informace o zabezpečení
Window vyžaduje vytvoření instance oprávnění zabezpečení UnmanagedCode
. U aplikací nainstalovaných na místním počítači a spuštěných z něj spadá toto do sady oprávnění udělených aplikaci.
To však spadá mimo sadu oprávnění udělených aplikacím spuštěným z zóny Internetu nebo místního intranetu pomocí Technologie ClickOnce. Uživatelé proto obdrží zabezpečovací upozornění ClickOnce a budou muset povýšit sadu oprávnění pro aplikaci na úplné důvěryhodnosti.
Kromě toho XBAPs ve výchozím nastavení nemůžou zobrazovat okna ani dialogová okna. Diskuzi o aspektech zabezpečení samostatných aplikací najdete v tématu strategie zabezpečení WPF – zabezpečení platformy.
Další typy windows
NavigationWindow je okno, které je navržené pro hostování obsahu s možností navigace. Další informace najdete v tématu Přehled navigace).
Dialogová okna jsou okna, která se často používají ke shromažďování informací od uživatele k dokončení funkce. Například když chce uživatel otevřít soubor, Otevřít soubor dialogové okno obvykle zobrazí aplikace, aby získala název souboru od uživatele. Další informace naleznete v tématu Přehled dialogových oken.
Viz také
.NET Desktop feedback