Question

Je le XAML suivant (simplifié par souci de concision, mais repro le problème dans Xamlpad ou Kaxaml):

<DockPanel Width="400">
    <TextBlock DockPanel.Dock="Left" TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
        Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
        Aenean gravida tempus lectus ut ornare. 
            Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
    </TextBlock>
    <Button MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
</DockPanel>

Mon problème est que je veux que le bouton pour prendre son minimum 100px de l'espace, et le texte pour envelopper convenablement de laisser cet espace. Cependant, ce qui se passe est que le texte enveloppe aussi près que possible 400px, puis le bouton est clipsé.

Si je snoop la sortie, je peux voir que le bouton est rendu à l'100px désiré, mais il est clipsage sur le côté de la DockPanel.

Si je renverse le Dock (si le bouton est arrimé « droit » et le TextBlock remplit) puis-je obtenir la mise en page que je veux, mais malheureusement ce n'est pas une option en raison de la mise en page environnante.

Y at-il quelque chose que je peux faire cela fera les DockPanel a) ne clip et b) la mise en page d'une manière qui respecte la MinWidth? Ou suis-je trouver coincé un mécanisme de mise en page alternative?

Merci d'avance!

Était-ce utile?

La solution

Ah, je suis stupide, et avait les yeux fixés sur le même code trop longtemps. Ma solution bien trop simple a été d'utiliser une grille:

<Grid Width="400">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <Button  Grid.Column="1" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
  <TextBlock TextWrapping="Wrap" Grid.Column="0">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
      Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
      Aenean gravida tempus lectus ut ornare. 
      Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
  </TextBlock>
</Grid>

Toutes mes excuses pour ma propre question stupide!

Autres conseils

Vous devez amarrer le bouton à droite et laisser le textblock remplir le reste. Voici le XAML correspondant:

<DockPanel Width="400">
    <Button DockPanel.Dock="Right" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
    <TextBlock TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
        Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
        Aenean gravida tempus lectus ut ornare. 
        Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
    </TextBlock>
</DockPanel>

Cordialement,
Oliver Hanappi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top