Pregunta

Tengo el siguiente XAML (simplificado por razones de brevedad, pero se repro el problema en 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>

Mi problema es que quiero el botón para tomar su mínimo 100px de espacio, y para el texto se ajuste adecuadamente a salir de ese espacio. Sin embargo, lo que sucede es que el texto se ajuste lo más cercano a 400 píxeles como sea posible, y luego se recorta el botón.

Si la salida Snoop puedo ver que el botón está prestando en la 100px deseada, pero está siendo recortado a un lado de la DockPanel.

Si invierto el Dock (por lo que el botón está en la base "derecha" y TextBlock llena) después consigo el diseño que quiero, pero por desgracia eso no es una opción debido a la disposición de los alrededores.

¿Hay algo que pueda hacer que hará que el DockPanel a) no clip y b) el diseño de una manera que respete la MinWidth? O estoy atascado encontrar un mecanismo disposición alternativa?

Gracias de antemano!

¿Fue útil?

Solución

Ah, yo soy tonto, y que había estado mirando el mismo código por demasiado tiempo. Mi solución mucho demasiado sencillo era utilizar una cuadrícula:

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

Disculpas por mi propia pregunta tonta!

Otros consejos

Usted debe acoplar el botón a la derecha y dejar que el bloque de texto llenar el resto. Aquí está el xaml correspondiente:

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

Mejores Saludos, Oliver Hanappi

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top