Bonjour,
Lorsqu'on autorise le redimensionnement manuel d'une fenêtre, est-il possible de contraindre ce redimensionnement à respecter à un certain rapport entre la hauteur et la largeur de la fenêtre ?
Bonjour,
Lorsqu'on autorise le redimensionnement manuel d'une fenêtre, est-il possible de contraindre ce redimensionnement à respecter à un certain rapport entre la hauteur et la largeur de la fenêtre ?
(\ _ /)
(='.'=)
(")-(")
Salut,
Voici un post qui en parle (si j'ai bien compris ce que tu veux ) :
http://www.developpez.net/forums/sho...d.php?t=558535
Deux solutions y sont proposées.
Salut, non tu n'as pas bien compris ce que je veux.
J'utilise déjà le ViewBox pour redimmensionner les composants de ma fenêtre. Ce que je voudrais maintenant, c'est pouvoir contraindre le redimensionnement manuel de la fenêtre à respecter un rapport hauteur / largeur pour celle-ci ?
Tu vois ce que je veux dire ?
Pour ceux qui veulent comprendre l'intérêt de ma demande, voici un exemple :
Si vous redimensionnez la fenêtre pour l'agrandir, vous verrez qu'il est plus efficace de contraindre ce redimensionnement à respecter le rapport hauteur / largeur initial de la fenêtre.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 <Window x:Class="AdresseParDéfautWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Adresse par défaut" Height="99" Width="599" WindowStyle="ToolWindow" AllowsTransparency="False" Opacity="2" ResizeMode="CanResize" SizeToContent="Manual" Name="Window1"> <Viewbox > <Grid ShowGridLines="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid.RowDefinitions> <RowDefinition Height="30*" /> <RowDefinition Height="30*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="72.99" /> <ColumnDefinition Width="458.01" /> <ColumnDefinition Width="48" /> </Grid.ColumnDefinitions> <Button Grid.Column="2" Margin="6,8.52,6,5.48" Name="Button1">X</Button> <Button Grid.Column="2" Grid.Row="1" Margin="6,8,6,6" Name="Button2">X</Button> <TextBlock Margin="12,8,6,6" Name="TextBlock1" Text="Voie" HorizontalAlignment="Left" VerticalAlignment="Center" /> <TextBlock Margin="12,8,6,6" Name="TextBlock2" Text="Commune" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" /> <ComboBox Grid.Column="1" HorizontalAlignment="Left" Margin="6,8,0,4" Name="ComboBox1" Width="142" /> <ComboBox Margin="6,5.48,6,6.52" Name="ComboBox2" Grid.Column="1" Grid.Row="1" /> <ComboBox Margin="154,8,6,4" Name="ComboBox3" Grid.Column="1" /> </Grid> </Viewbox> </Window>
(\ _ /)
(='.'=)
(")-(")
Tu as essayé en faisant un Binding entre la hauteur et la largeur de te fenêtre avec, éventuellement, un Converter dans le cas où tu veux utiliser un ratio ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Oui mais les fontSize des contrôles vont elles suivre comme avec le viewBox ?Envoyé par Thomas Lebrun
Sinon j'avais pensé aussi à ça (jeu avec le conteneur Grid, pas de ViewBox, le code suivant parle de lui même) :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 <Window x:Class="WpfExpanderAppli.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Adresse par défaut" Height="100" Width="600" WindowStyle="ToolWindow" AllowsTransparency="False" Opacity="2" ResizeMode="CanResize" SizeToContent="Manual" x:Name="Wind1" > <Grid x:Name="MainGrid" ShowGridLines="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid.RowDefinitions> <RowDefinition Height="30*" /> <RowDefinition Height="30*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.2*" /> <ColumnDefinition Width="0.7*" /> <ColumnDefinition Width="0.1*" /> </Grid.ColumnDefinitions> <Grid Grid.Column="1" > <Grid.ColumnDefinitions> <ColumnDefinition Width="0.4*" /> <ColumnDefinition Width="0.6*" /> </Grid.ColumnDefinitions> <ComboBox Grid.Column="0" Margin="6,8,0,4" Name="ComboBox1" /> <ComboBox Margin="6,8,6,4" Name="ComboBox3" Grid.Column="1" /> </Grid> <ComboBox Margin="6,8,6,6" Name="ComboBox2" Grid.Column="1" Grid.Row="1" /> <TextBlock Margin="12,8,6,6" Name="TextBlock1" Text="Voie" HorizontalAlignment="Left" VerticalAlignment="Center" /> <TextBlock Margin="12,8,6,6" Grid.Row="1" Name="TextBlock2" Text="Commune" HorizontalAlignment="Left" VerticalAlignment="Center" /> <Button Grid.Column="2" Margin="6,8,6,6" Name="Button1">X</Button> <Button Grid.Column="2" Grid.Row="1" Margin="6,8,6,6" Name="Button2">X</Button> </Grid> </Window>
Problématique : les fontSize des contrôles ne suivent pas... il faut peut-être les calculer à coup de binding et converter (mais ça devient lourd à gérer je pense)
Salut,
L'idée de Thomas me parait excellente ! Je la testerai correctement ce soir car là je n'ai pas le temps de me pencher dessus et je n'ai pas réussi du premier coup.
binoo, ta solution est trop complexe car effectivement je veux garder le resize du texte avec le Viewbox.
(\ _ /)
(='.'=)
(")-(")
Pour l'idée de Thomas, le Binding fonctionne (avec ou sans converter). Mais la modification manuelle de la largeur de la fenêtre une fois celle-ci ouverte n'est pas capté par le binding. Donc la mise à jour ne se fait qu'à l'ouverture de la fenêtre, c'est tout.
Dans le but de mieux capter l'événement de mise à jour et/ou y implémenter directement le "convertisseur" (la contrainte de dimensionnement) y aurait-il selon vous quelque chose à faire du côté de la validation et des rappels de propriétés de dépendance Height ou Width, avec éventuellement une méthode comme CoerceValue ?
(\ _ /)
(='.'=)
(")-(")
Et si tu t'abonnes à l'event Resize de ta Window pour remettre la procédure de redimensionnement ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
En faisant ça je risque de créer l'événement Resize en chaine.
(\ _ /)
(='.'=)
(")-(")
Bon pour résumer :
- la solution du Binding sur la propriété de dépendance Width ou Heigth était la plus élégante mais la liaison n'est pas mise à jour lors du redimmensionnement après ouverture de la fenêtre
- la solution de redimensionner dans l'événement Resize fonctionne, mais côté ergonomie et esthétique, c'est pas encore ça
- donc je pense que j'essairai plutôt de caser quelque part un petit slider pour permettre un redimensionnement manuel précis et intuitif. C'est le même principe qui est utilisé en mode Design sous VS, et ça revient à la première solution (le Binding) sauf que je fais dépendre la mise à jour d'un élément que je maîtrise (le slider) au lieu d'une propriété de dépendance (Window.Height) qui ne notifie pas toujours ses changements.
Merci pour votre aide.
(\ _ /)
(='.'=)
(")-(")
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager