2012-05-26 20 views
5

Mam listę z DataTemplate, który pokazuje tekst i przycisk "x" obok niego. Chcę, aby "X" btn pokazał się skrajnie po prawej, więc wszystkie pojawią się w tym samym miejscu. XML, którego używam to:Jak wyrównać zawartość do 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> 

Próbowałem dodać Grid inpalce z StackPanel, ale nie udało się.

Jak zaprojektować lub wyrównać "x" na liście, aby był skrajnie prawy dla każdej pozycji.

+2

Siatka była słuszna. Siatka z 2 kolumnami. Pierwszy powinien mieć Width = "*" a drugi - Width = "Auto". Ustaw także HorizontalContentAlignment = "Stretch" dla ListBox – EvAlex

Odpowiedz

5

Oto moje zdanie na ten temat, użyj siatki w następujący sposób:

<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

Po zmianie TEmpalte z sTackPanel na Grid, widzę poprawnie kontenery, ale nie widzę już scrollveiwera. Jeśli ponownie zamienić na StackPanel, widzę pasek przewijania. Jak sobie z tym poradzić? – Tvd

+0

Jestem zdezorientowany, który ScrollViewer i gdzie jest umieszczony? –

+0

Musiałem powiększyć rozmiar listy i to się udało. Teraz można zobaczyć także przewijarkę. Wielkie dzięki, Magnus Johhansson. – Tvd

1

Jeśli Twój przedmiot mają być przyciski następnie trzeba specifiy HorizontalContentAlignment = „Stretch”. Oto szablon, którego używam dla przycisków z krzyżem po prawej stronie:

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