2012-01-18 11 views
14

Mam 3 pola tekstowe i 1 przycisk i chcę wprowadzić informacje o skrzynkach w polu listy za pomocą wielokolumn. tak jak katalog telefoniczny, który będzie zapisany w skrzynce na listyListwa wielokolumnowa w WPF

Wiem, jak to zrobić z jedną kolumną listbox1.Items.Add(TextBox1.text). Jak mogę dodać pozostałe pola tekstowe w następnych kolumnach? Używam .net WPF

chcę użyć listbox lub listview ale nie teraz, jak wprowadzić informacje o polach tekstowych w ListView lub listbox

patrz link http://i.stack.imgur.com/FtQ47.png

Odpowiedz

23

Chcesz zamiast tego: ListView.

coś takiego:

<ListView ItemsSource="{Binding SourceCollection}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Test1" DisplayMemberBinding="{Binding Test1}" /> 
       <GridViewColumn Header="Test2" DisplayMemberBinding="{Binding Test2}" /> 
       <GridViewColumn Header="Test3" DisplayMemberBinding="{Binding Test3}" /> 
       <GridViewColumn Header="Button"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <Button>Button Text</Button> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 
+0

! Mistake - Edytowałem twoją Q raczej niż własną. Przywracając ... –

+0

dziękuję za szybką odpowiedź przyjacielu powinienem użyć go w kodzie xaml – user1156309

+1

jak mogę wstawić do niego elementy za pomocą kodu C# –

21

Jako Ray słusznie wskazuje, ListView będzie wykonać zadanie. Jednak jeśli utkniesz i/lub chcesz użyć ListBox, możesz również użyć ItemTemplate z Grid i ustawić Grid.IsSharedSizeScope property na samym ListBoxie. Na przykład:

<ListBox ItemsSource="{Binding DataSource}" Grid.IsSharedSizeScope="True"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Column1"/> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Column2"/> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Column3"/> 
       </Grid.ColumnDefinitions> 
       <!-- Assumes MVVM and you wish to bind to properties and commands --> 
       <TextBlock Grid.Column="0" Text="{Binding ColumnOneText}"/> 
       <TextBlock Grid.Column="1" Text="{Binding ColumnTwoText}"/> 
       <TextBlock Grid.Column="2" Text="{Binding ColumnThreeText}"/> 
       <Button Content="ClickMe" Command="{Binding ButtonExecutionCommand}"/> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Jest to czysty trik, który może być również stosowany do innych przypadków, gdzie masz wiele wystąpień Siatka (ie: jeden na ListBoxItem co za tym przypadku) i chcesz podzielić kolumnę.

poważaniem,

+1

Kod musi być zawinięty w , ponieważ jest teraz obsługiwanym potomkiem właściwości ItemTemplate. –

+0

Masz rację :) –

1

użycie groupbox i docpanel

<GroupBox Width="250" 
          Margin="10,0,0,0"       
          FontSize="20" 
          Header="کسورات" 
          Style="{StaticResource Gb}"> 
        <ListBox Margin="0" AlternationCount="2"> 
         <ListBoxItem> 
          <Border Margin="0" 
            BorderBrush="#ddd" 
            BorderThickness="0,1,0,1"> 
           <DockPanel Background="#f9f9f9" LastChildFill="True"> 


            <controls2:TimeEditBox DockPanel.Dock="Right" 
                  FontSize="13" 
                  Mask="00:00" 
                  Text="00:00" 
                  TextAlignment="Center" 
                  controls2:TextBoxMaskBehavior.Mask="Integer" /> 
            <TextBox Width="50" 
              Margin="0,0,5,0" 
              DockPanel.Dock="Right" 
              FontSize="13" 
              Text="122" 
              TextAlignment="Center" 
              controls2:TextBoxMaskBehavior.Mask="Integer" /> 
            <TextBlock VerticalAlignment="Center" 
               FontSize="13" 
               Text="غیبت" 
               TextAlignment="Center" /> 
           </DockPanel> 
          </Border> 
         </ListBoxItem> 

       </GroupBox>