2011-09-14 12 views
8

Quiero crear un ListBoxItem con un diseño que incluya dos áreas, una 'float: left' y una 'float: right', con el ítem global rellenando todo el ancho asignado al ListBox y el ListBox llenando su contenedor (es decir, expandiéndose para llenar el espacio disponible).¿Cómo puedo replicar 'float: right' en XAML?

¿Cómo puedo lograr esto en XAML?

gracias

+1

Puede utilizar un componente de tabla o parrilla para que, defina una o ambas columnas para auto -tamaño. –

Respuesta

8

Para el "tema general de llenar todo el ancho asignado al cuadro de lista" se necesita un estilo como este:

<Style TargetType="ListBoxItem"> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
</Style> 

y opcionalmente desactivar el desplazamiento horizontal para el cuadro de lista:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" .. > 

para el panel raíz de DataTemplate puede usar un panel de puertos:

<DockPanel> 
    <SomeControlLeft DockPanel.Dock="Left" Margin="0 0 5 0" /> 
    <SomeControlRight DockPanel.Dock="Right" Margin="5 0 0 0" /> 
    <SomeControlFill /> 
</DockPanel> 

o una cuadrícula:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" /> 
    <ColumnDefinition Width="5" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="5" /> 
    <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <SomeControlLeft Grid.Column="0" /> 
    <SomeControlRight Grid.Column="4" /> 
    <SomeControlFill Grid.Column="2" /> 
</Grid> 
+0

Gracias por esto, me pusiste en camino para lograr lo que estaba buscando. – MalcomTucker

0

Utilice un Grid a la posición o elementos de muelle para diferentes partes de la forma/panel.

+0

¿se puede usar una cuadrícula en una plantilla de elemento de cuadro de lista? – MalcomTucker

+0

La belleza de XAML es que puedes usar casi cualquier cosa dentro de casi cualquier otra cosa. Si tiene que hacer esa pregunta, la respuesta (aproximadamente el 99% del tiempo) siempre será un ** SÍ ** rotundo. – qJake

+0

Ok gracias. Soy nuevo en XAML: si tiene un momento, ¿podría proporcionar una muestra de código? ¡Solo un esqueleto sería genial! Gracias – MalcomTucker

1

Esta es la forma en que lo haría:

<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <Grid Background="Red"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 

         <TextBlock Text="{TemplateBinding Content}"/> 
         <TextBlock Text="{TemplateBinding Tag}" Grid.Column="1"/> 

        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White"> 

    <ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}"> 
     <ListBoxItem Content="Lorem" Tag="Ipsum"/> 
     <ListBoxItem Content="Hello" Tag="World"/> 
     <ListBoxItem Content="Be" Tag="Happy"/> 
    </ListBox> 

</Grid> 
Cuestiones relacionadas