« Window » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
 
(8 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:WPF]]
[[Category:WPF]]
= Événement Closed vs Closing =
= XML Namespaces =
[http://msdn.microsoft.com/en-us/library/system.windows.window.closing%28v=vs.110%29.aspx Closing] est appelé juste après la méthode <tt>Window.Close()</tt>.<br>
<kode lang='xaml'>
La gestion de l’événement Closing permet d’annuler la fermeture de la fenêtre.
<Window x:Class="MyNamespace.MainWindow"
<kode lang=csharp>
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
void Window_Closing(object sender, CancelEventArgs e)
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
{
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    e.Cancel = true;
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyNamespace"
        mc:Ignorable="d">
</kode>
</kode>


[http://msdn.microsoft.com/en-us/library/system.windows.window.closed%28v=vs.110%29.aspx Closed] est lui appelé juste avant que le fenêtre ne se ferme.
= Useful properties =
 
= Propriétés utiles =
{| class="wikitable wtp"  
{| class="wikitable wtp"  
! Propriété
! Propriété
! Valeur
! Valeur
|-
|-
| WindowStyle || ToolWindow
| [https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.window.windowstyle WindowStyle] || {{boxx|None}} {{boxx|ToolWindow}} {{boxx|SingleBorderWindow}} (default) {{boxx|ThreeDBorderWindow}}
|-
|-
| ResizeMode || NoResize
| ResizeMode || NoResize
Ligne 26 : Ligne 26 :
| Title || Mon Titre
| Title || Mon Titre
|}
|}
== Design properties ==
<kode lang='xaml'>
<Window d:Height="450"
        d:Width="800"
        d:DataContext="{d:DesignInstance local:MainWindowViewModel}">
</kode>
= Événement Closed vs Closing =
[http://msdn.microsoft.com/en-us/library/system.windows.window.closing%28v=vs.110%29.aspx Closing] est appelé juste après la méthode <tt>Window.Close()</tt>.<br>
La gestion de l’événement Closing permet d’annuler la fermeture de la fenêtre.
<kode lang=csharp>
void Window_Closing(object sender, CancelEventArgs e)
{
    e.Cancel = true;
</kode>
[http://msdn.microsoft.com/en-us/library/system.windows.window.closed%28v=vs.110%29.aspx Closed] est lui appelé juste avant que le fenêtre ne se ferme.


= Maximiser une fenêtre =
= Maximiser une fenêtre =
Ligne 50 : Ligne 68 :
</kode>
</kode>


= Ouvrir une seconde fenêtre =
= Open a child window =
<filebox fn='MainWindow.xaml'>
<Button Command="{Binding OpenCommand}" />
</filebox>
 
<filebox fn='MainWindowViewModel.cs'>
public ICommand OpenCommand { get; set; }
 
public MainWindowViewModel()
{
    OpenCommand = new DelegateCommand(this.Open);
}
 
private void Open()
{
    var childWindow = new ChildWindow();
    var childWindowReturnedValue = childWindow.ShowDialog();
}
</filebox>
 
<filebox fn='ChildWindow.xaml'>
<Window x:Class="WpfApp1.ChildWindow"
        x:Name="Window">
 
    <DockPanel HorizontalAlignment="Center">
 
        <StackPanel Orientation="Horizontal"
                    DockPanel.Dock="Bottom">
            <!-- IsDefault="True" makes the focus on the button, so press enter makes the button click -->
            <Button Content="Ok"
                    IsDefault="True"
                    Command="{Binding OkCommand}"
                    CommandParameter="{Binding ElementName=Window} "/>
            <Button Content="Cancel"
                    IsCancel="True" /> <!-- IsCancel="True" makes the button close the window when clicked and return false -->
        </StackPanel>
 
        <TextBlock>
            Some text ...
        </TextBlock>
</filebox>
 
<filebox fn='ChildWindowViewModel.cs'>
public ICommand OkCommand { get; set; }
 
public ChildWindowViewModel()
{
    OkCommand = new DelegateCommand<Window>(this.Ok);
}
 
private void Ok(Window window)
{
    // set a value to DialogResult to close the window
    window.DialogResult = true;
}
</filebox>
 
== Code-behind ==
<kode lang=csharp>
<kode lang=csharp>
// depuis le code behind
// depuis le code behind

Dernière version du 13 mai 2020 à 14:39

XML Namespaces

Xaml.svg
<Window x:Class="MyNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyNamespace"
        mc:Ignorable="d">

Useful properties

Propriété Valeur
WindowStyle None ToolWindow SingleBorderWindow (default) ThreeDBorderWindow
ResizeMode NoResize
SizeToContent WidthAndHeight
WindowStartupLocation CenterOwner
Title Mon Titre

Design properties

Xaml.svg
<Window d:Height="450"
        d:Width="800"
        d:DataContext="{d:DesignInstance local:MainWindowViewModel}">

Événement Closed vs Closing

Closing est appelé juste après la méthode Window.Close().
La gestion de l’événement Closing permet d’annuler la fermeture de la fenêtre.

Csharp.svg
void Window_Closing(object sender, CancelEventArgs e)
{
    e.Cancel = true;

Closed est lui appelé juste avant que le fenêtre ne se ferme.

Maximiser une fenêtre

Xaml.svg
<Window WindowState="Maximized">
Csharp.svg
Application.Current.MainWindow.WindowState = WindowState.Maximized;

Héritage de fenêtre

Ici Window1 hérite de WindowBase, cela n'est possible que si WindowsBase ne contient pas de XAML.

Csharp.svg
namespace Vues
{
    public class WindowBase : Window { ... }
    public class Window1 : WindowBase { ... }
}
Xaml.svg
<vues:WindowBase x:Class="Vues.Windows1"
                 xmlns:vues="clr-namespace:Vues">

Open a child window

MainWindow.xaml
<Button Command="{Binding OpenCommand}" />
MainWindowViewModel.cs
public ICommand OpenCommand { get; set; }

public MainWindowViewModel()
{
    OpenCommand = new DelegateCommand(this.Open);
}

private void Open()
{
    var childWindow = new ChildWindow();
    var childWindowReturnedValue = childWindow.ShowDialog();
}
ChildWindow.xaml
<Window x:Class="WpfApp1.ChildWindow"
        x:Name="Window">

    <DockPanel HorizontalAlignment="Center">

        <StackPanel Orientation="Horizontal"
                    DockPanel.Dock="Bottom">
            <!-- IsDefault="True" makes the focus on the button, so press enter makes the button click -->
            <Button Content="Ok"
                    IsDefault="True"
                    Command="{Binding OkCommand}"
                    CommandParameter="{Binding ElementName=Window} "/> 
            <Button Content="Cancel"
                    IsCancel="True" /> <!-- IsCancel="True" makes the button close the window when clicked and return false -->
        </StackPanel>

        <TextBlock>
            Some text ...
        </TextBlock>
ChildWindowViewModel.cs
public ICommand OkCommand { get; set; }

public ChildWindowViewModel()
{
    OkCommand = new DelegateCommand<Window>(this.Ok);
}

private void Ok(Window window)
{
    // set a value to DialogResult to close the window
    window.DialogResult = true;
}

Code-behind

Csharp.svg
// depuis le code behind
var childWindow = new Window() { Owner = this };  // définir la fenêtre courante comme parente
childWindow.Height = 100; childWindow.Width = 50;
var stackPanel = new StackPanel();

var button = new Button();
button.Content = "Ok";
// le bouton de validation est celui qui possède la propriété IsDefault à true
button.IsDefault = true;
button.Click += (_sender, _e) => { window.DialogResult = true; window.Close(); };
stackPanel.Children.Add(button);

childWindow.Content = stackPanel;
// définit la position de la fenêtre
childWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen;
childWindow.ShowDialog();

Renvoit la window contenant le UserControl

Csharp.svg
// renvoit la window contenant le UserControl
Window.GetWindow(monUserControl);

Padding

Ajouter une border transparente fait office de padding.

Xaml.svg
<Window>
    <Border BorderThickness="4" BorderBrush="Transparent">