Domanda

Ho il seguente Xaml (semplificato per brevità, ma riprodurrà il problema in Xamlpad o 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>

Il mio problema è che voglio che il pulsante occupi almeno 100 px di spazio e che il testo si avvolga adeguatamente per lasciare quello spazio.Tuttavia, ciò che accade è che il testo va a capo il più vicino possibile a 400px e quindi il pulsante viene ritagliato.

Se esploro l'output, posso vedere che il pulsante viene visualizzato ai 100 px desiderati, ma viene ritagliato dal lato del DockPanel.

Se inverto il Dock (in modo che il pulsante sia ancorato a "Destra" e il TextBlock si riempia), ottengo il layout che desidero, ma sfortunatamente non è un'opzione a causa del layout circostante.

C'è qualcosa che posso fare per far sì che il DockPanel a) non si ritagli eb) si disponga in modo da rispettare MinWidth?Oppure sono bloccato nel trovare un meccanismo di layout alternativo?

Grazie in anticipo!

È stato utile?

Soluzione

Ah, sono stupido e ho fissato lo stesso codice per troppo tempo.La mia soluzione fin troppo semplice era usare una griglia:

<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>

Mi scuso per la mia domanda stupida!

Altri suggerimenti

Dovresti ancorare il pulsante a destra e lasciare che il blocco di testo riempia il resto.Ecco il corrispondente xaml:

<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>

Distinti saluti,
Oliver Hanappi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top