2012-05-26 16 views
5

Tengo una lista con una plantilla de datos que muestra el texto y un botón "x" al lado. Quiero que la "X" btn se muestre en el extremo derecho, para que todos aparezcan en el mismo lugar. El XML que uso es:¿Cómo alinear correctamente el contenido en un DataTemplate?

<ListBox Name="seiveListBox" ItemsSource="{Binding}" MinWidth="80" Height="120" ScrollViewer.VerticalScrollBarVisibility="Visible" > 
           <ListBox.ItemTemplate> 
            <DataTemplate> 
             <StackPanel Orientation="Horizontal"> 
              <TextBlock Text="{Binding}" /> 
              <Button Name="delSeiveFromListBtn" Content="X" ToolTip="Delete" Margin="8, 0, 0, 0" Click="delSeiveFromListBtn_Click"></Button> 
             </StackPanel> 
            </DataTemplate> 
           </ListBox.ItemTemplate> 
          </ListBox> 

Intenté agregar Grid inpalce de StackPanel, pero no fue exitoso.

¿Cómo lo diseño o alineo la "x" en la lista para que esté en el extremo derecho de cada elemento.

+2

La rejilla fue idea correcta. Cuadrícula con 2 columnas. Primero debe tener Ancho = "*" y segundo - Ancho = "Auto". También configure HorizontalContentAlignment = "Stretch" para ListBox – EvAlex

Respuesta

5

Aquí está mi opinión sobre ella, utilizar una cuadrícula de la siguiente manera:

<ListBox ItemsSource="{Binding Items}" 
      Width="200" HorizontalContentAlignment="Stretch"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="{Binding Data}"></TextBlock> 
       <Button Grid.Column="1" Content="x"></Button> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

Al cambiar el TEmpalte de sTackPanel a Grid, veo los contets correctamente, pero ya no puedo ver el scrollveiwer. Si lo vuelvo a colocar en StackPanel, entonces puedo ver la barra de desplazamiento. ¿Cómo manejar esto? – Tvd

+0

Estoy confundido, ¿qué ScrollViewer y dónde se coloca? –

+0

Tuve que aumentar el tamaño de la lista y eso hizo el trabajo. Ahora puede ver el scrollviewer también. Muchas gracias, Magnus Johhansson. – Tvd

1

Si el artículo se supone que son los botones entonces usted tiene que specifiy HorizontalContentAlignment = "estiramiento". Aquí es la plantilla que utilizo para los botones con una cruz en el lado derecho:

<DataTemplate x:Key="DeletableButtonCommandTemplate"> 
    <Button Command="{Binding}" Margin="0,1" HorizontalContentAlignment="Stretch"> 
     <Grid HorizontalAlignment="Stretch"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="18"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding Caption}" HorizontalAlignment="Center" Grid.Column="0"></TextBlock> 
      <shared:CrossButton Width="12" Height="12" Grid.Column="1" 
           cal:Message.Attach="[Event Click]=[DeleteCommandSource($Datacontext)]" 
           Visibility="{Binding Path=AssociatedObject.Owner, Converter={sharedConv:NotNullToVisibleConverter} }" /> 
     </Grid> 
    </Button> 
</DataTemplate> 
Cuestiones relacionadas