23 votes

Uniformément de la taille des boutons en fonction du contenu de plus de bouton

Imaginez, j'ai deux WPF boutons dans une fenêtre, avec un contenu comme suit:

<Button>OK</Button>
<Button>Cancel</Button>

Je veux un de ces boutons pour être de la même largeur, mais dans un scénario où l' Content est lié à un localisée valeur pour un utilisateur donné de la langue, je ne sais pas comment grand les boutons doivent être pour accueillir le nouveau contenu.

Comment pourrais-je appliquer une largeur minimale de ces boutons, tels que la largeur de la plus large un (selon le contenu) est utilisé efficacement comme l' MinWidth de deux, gardant ainsi leur uniforme?

Ou pour le dire d'une autre façon: je ne veux pas les boutons à la largeur de son conteneur (à moins d'utiliser un récipient de façon intelligente est la réponse à mon problème), et je ne veux pas qu'à chaque juste à la taille de leurs propres contenus, parce que cela va les rendre différentes tailles. Je veux quelque chose entre les deux. L'une avec le plus grand contenu à la taille d'affichage du contenu, et tous les autres de la taille de la même largeur, de sorte que les largeurs sont tous égaux.

J'attends la réponse se trouve dans les mettre dans une sorte de récipient. Je sais que je pourrais utiliser un Grid et permettez-leur de remplir la grille de "cellules", mais le point est que je ne veux pas être trop large, soit. Je sais que je pourrais avoir un peu de code-behind qui s'exécute sur l' Content_Changed cas de boutons et définit la minwidth à celle de la plus large bouton, mais je suis intéressé par un pur-xaml méthode. Il peut être j'ai besoin de créer un contrôle personnalisé étendre ItemsControl que rusn code-behind lorsque de nouveaux éléments sont ajoutés ou re-dimensionné et s'applique à la largeur du plus grand élément que l' MinWidth de tous les autres éléments.

Merci beaucoup à l'avance.

18voto

H.B. Points 76352

La Grille

  <Grid HorizontalAlignment="Right" Grid.IsSharedSizeScope="true">
    <Grid.ColumnDefinitions>
        <ColumnDefinition SharedSizeGroup="A"/>
        <ColumnDefinition SharedSizeGroup="A"/>
    </Grid.ColumnDefinitions>
    <Grid.Children>
        <Button Grid.Column="0" Content="OK"/>
        <Button Grid.Column="1" Content="Cancel"/>
    </Grid.Children>
  </Grid>

Ce peut être rompu, vous avez juste besoin de mettre la IsSharedSizeScope sur un ancêtre commun, par exemple:

    <StackPanel Grid.IsSharedSizeScope="true">
        <Grid HorizontalAlignment="Right">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="A"/>
            </Grid.ColumnDefinitions>
            <Grid.Children>
                <Button Grid.Column="0" Content="OK"/>
            </Grid.Children>
        </Grid>
        <!-- ... -->
        <Grid HorizontalAlignment="Left">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="A"/>
            </Grid.ColumnDefinitions>
            <Grid.Children>
                <Button Grid.Column="0" Content="Cancel"/>
            </Grid.Children>
        </Grid>
    </StackPanel>

Pour prévenir les boutons de médias deviennent trop grand changement de l' HorizontalAlignment de la Grille à autre chose qu' Stretch ou de définir un MaxWidth.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X