10
votes

Contraintes de dimensionnement de la fenêtre par contenu

Je veux que la fenêtre respecte minwidth / minheight et maxwidth / MaxHeight Spécifications du contrôle de contenu à l'intérieur .

Certains ont suggéré d'utiliser sizetocontent , mais cela aide uniquement à définir la taille de la fenêtre initiale, pas les contraintes.

Autres suggérées Measeverride et de la planification de la fenêtre et de la largeur de la fenêtre et de la largeur de la fenêtre, mais cela semble être un peu impur, considérant qu'un tel problème trivial devrait sûrement avoir une solution purement déclarative.

juste pour mentionner une autre solution qui semble raisonnable mais ne fonctionne pas pas (et avait déjà été mentionnée dans une réponse qui a été supprimée): Binding Minwidth de la fenêtre à < Code> Minwidth du contrôle ne prend pas en compte les décorations de la fenêtre.


0 commentaires

3 Réponses :


7
votes

Si la taille de la fenêtre initiale est définie de manière à ce que la taille du contenu réel ne soit pas contraincée par le minwidth / minheight et maxwidth / maxheight du contenu dans la carte de mise en page initiale (par exemple, à l'aide de fenêtre.Sizetocontent = "widthanandheight"), puis suivant Les équations sont vraies: xxx

sur la base de ces équations, vous pouvez dériver le code suivant: xxx

Je ne sais pas comment atteindre cela efficacement Utilisation de l'approche déclarative pure puisque le code doit être manifesté juste une fois après le passage initial de la mise en page.


2 commentaires

Savez-vous si SIZECHANGED sera tiré dans l'affaire Minwidth / Minheight ou Maxwidth / MaxHeight du changement de contenu? Ou devrais-je attacher une liaison à ces propriétés séparément?


Ceci est définitivement utile, je vérifie actuellement si cela résout tout mon problème.



2
votes

Utiliser une extension de balisage de liaison. Une contraignante est la manière du WPF de dire lorsque cette propriété (source) modifie met à jour une autre propriété (cible). Dans ce cas, la propriété Minwidth de la grille est la source et la propriété Minwidth de la fenêtre est la cible.

<Window x:Class="MinMaxValuesOnWindows.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="600" Width="800"
    MinWidth="{Binding ElementName=gridy, Path=MinWidth}"
    MinHeight="{Binding ElementName=gridy, Path=MinHeight}"
    MaxWidth="{Binding ElementName=gridy, Path=MaxWidth}"
    MaxHeight="{Binding ElementName=gridy, Path=MaxHeight}">
    <Grid Name="gridy"  MinHeight="80" MinWidth="80" MaxHeight="300" MaxWidth="300"/>
</Window>


1 commentaires

Ce que vous dites est techniquement vrai, mais comme je l'ai noté dans la question, la principale difficulté que je suis confrontée consiste à déterminer les dimensions de la décoration de manière indépendante du thème. L'autre réponse résout cette partie du puzzle, je l'accepterai.



5
votes

Certains ont suggéré d'utiliser sizetocontent , mais cela aide uniquement à définir la taille de la fenêtre initiale, pas les contraintes.

J'ai travaillé autour de cela en définissant le Minwidth et Minheight Propriétés juste après Les fenêtres ont été initialisées:

< fort> mainwindow.xaml xxx

mainwindow.xaml.cs xxx


0 commentaires