Sdílet prostřednictvím


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:

Snímek obrazovky zobrazující prvky 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 atribut x:Class. Když je aplikace sestavena, existence x: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 atributem x: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 implementuje InitializeComponent 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 atributem x: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řídou partial, 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řídou partial 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 Window.Show

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 BooleanCancel. 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:

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:

diagram, který zobrazuje události v době života 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):

diagram, který zobrazuje události v době životnosti okna bez aktivace

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:

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:

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:

  1. FrameworkElement.MinHeight

  2. FrameworkElement.MaxHeight

  3. SizeToContent.Height/SizeToContent.WidthAndHeight

  4. FrameworkElement.Height

pro vlastnosti šířky:

  1. FrameworkElement.MinWidth

  2. FrameworkElement.MaxWidth

  3. SizeToContent.Width/SizeToContent.WidthAndHeight

  4. FrameworkElement.Width

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:

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.

Efekt těchto stylů oken je znázorněn na následujícím obrázku:

Ilustrace stylů ohraničení okna

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:

okno bubliny řeči s textem Přetáhnout mě.

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:

Snímek obrazovky s oknem s tlačítkem na hlavním panelu

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é