104 votes

WPF: HorizontalAlignment = Stretch, MaxWidth et aligné à gauche en même temps?

Cela semble comme il devrait être facile mais je suis perplexe. Dans WPF, j'aimerais une zone de texte qui s'étend à la largeur de son parent, mais seulement d'une largeur maximale. Le problème est que je veux qu'il soit justifié à gauche à l'intérieur de son parent. Pour obtenir de l'élasticité, vous devez utiliser HorizontalAlignment="Stretch", mais alors le résultat est centré. J'ai expérimenté avec HorizontalContentAlignment, mais il ne semble pas faire quoi que ce soit.

Comment puis-je obtenir ce bleu de la zone de texte à croître avec la taille de la fenêtre, avoir une largeur maximale de 200 pixels, et être justifié à gauche?

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>  
    <TextBox Background="Azure" Text="Hello" HorizontalAlignment="Stretch" MaxWidth="200" />
  </StackPanel>
</Page>

Suis-je à faire de ce trop dur? Quel est le truc? Merci!

96voto

Nir Points 18250

Vous pouvez définir HorizontalAlignment à gauche, définir votre MaxWidth puis lier Width au ActualWidth de l'élément parent:

 <Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel Name="Container">   
    <TextBox Background="Azure" 
    Width="{Binding ElementName=Container,Path=ActualWidth}"
    Text="Hello" HorizontalAlignment="Left" MaxWidth="200" />
  </StackPanel>
</Page>
 

55voto

Kent Boogaart Points 97432
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" MaxWidth="200"/>
    </Grid.ColumnDefinitions>

    <TextBox Background="Azure" Text="Hello" />
</Grid>

8voto

Scott Bussinger Points 802

Les deux réponses données travaillé pour le problème que j'ai dit -- Merci!

Dans ma vraie demande si, j'ai essayé de contraindre un panneau à l'intérieur d'un ScrollViewer et Kent méthode ne gère pas très bien pour une raison que je n'ai pas pris la peine de la piste vers le bas. Fondamentalement, les contrôles pourraient s'étendre au-delà de la MaxWidth réglage et défait mon intention.

Nir la technique a bien fonctionné et je n'avais pas le problème avec le ScrollViewer, si il y a une petite chose à regarder dehors pour. Vous voulez être sûr que la droite et la gauche de la marge sur la zone de texte sont mis à 0 ou ils vont obtenir de la manière. J'ai aussi changé la liaison à utiliser ViewportWidth au lieu de ActualWidth pour éviter les problèmes lorsque la barre de défilement verticale est apparue.

7voto

Filip Skakun Points 20765

Vous pouvez l'utiliser pour la largeur de votre DataTemplate:

 Width="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}"
 

Assurez-vous que votre racine DataTemplate a Margin = "0" (vous pouvez utiliser un panneau comme racine et définir la marge sur les enfants de cette racine).

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