none
Como inserir um checkbox e button no listview? RRS feed

  • Pergunta



  • Pessoal,

    Tudo bem ?

    Ai vai um problema para vocês me ajudarem:

    Tenho um listview e estou tendo problemas em utilza-lo. São quatro colunas e nelas serão inseridas informações. Entao, o que estou precisando fazer é:

     - Primeiro preciso fazer aparecer as linhas ;
     - Nos campos da coluna "imagem" preciso inserir um button; (é possivel colocar dois objetos numa mesma celula?)
    - por ultimo, nos campos da coluna "correto" preciso de um checkbox.

    Estou enviando o que consegui fazer ate agora ...

    Vcs pode me dar uma ajuda?

    Obrigado.

    <GroupBox Width="Auto" Height="Auto" FontSize="11" Header="Alternativas" Margin="0,10,0,10" HorizontalAlignment="Stretch">
                        <ListView IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Stretch"
                            Width="Auto" Margin="0,10,0,0" Height="250" Grid.Row="1"                            
                            SelectionMode="Single">
                            <ListView.View >
                                <GridView>
                                    <GridViewColumn Header="Item" Width="50" />
                                    <GridViewColumn Header="Alternativa" Width="500"/>
                                    <GridViewColumn Header="Imagem" Width="175" />
                                    <GridViewColumn Header="Correta" Width="Auto">
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <CheckBox IsChecked="{Binding Path=Correta}" HorizontalAlignment="Center" />
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>                                                                   
                                    </GridViewColumn>
                                </GridView>
                            </ListView.View>
                        </ListView>
                    </GroupBox>
    quarta-feira, 5 de março de 2008 17:27

Respostas

  • Faça um ItemTemplate como o seguinte (você pode usar uma grid ao invés do StackPanel):

      <DataTemplate x:Key="ColunasTemplate">
    <StackPanel>
    <StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Path=Nome}" FontWeight="Bold" />
    <TextBlock Margin="5,0,0,0" Text="{Binding Path=Endereco}"/>
    <TextBlock Margin="5,0,0,0" Text="{Binding Path=Telefone}"/> </StackPanel>
    </StackPanel>
    </DataTemplate>
    e configure o ItemTemplate da ListBox assim:
    <ListBox HorizontalAlignment="Stretch" Margin="5" Name="listBox1" 
    VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch"
    ItemTemplate="{StaticResource ColunasTemplate}"/>

    Se quiser colocar as linhas de grid, coloque uma borda em volta de cada TextBlock:
    <Border BorderBrush="Gray">
    <TextBlock Text="{Binding Path=Nome}" FontWeight="Bold" />
    </Border>
    Se quiser colocar as colunas com tamanhos fixos, dê um Width para os TextBlocks.

    Estes dois artigos mostram como fazer uma ListBox multicolunas:
    http://blogs.msdn.com/henryh/archive/2005/06/23/431846.aspx
    http://itknowledgeexchange.techtarget.com/wpf/listbox-multi-column-example/

    Bruno

    sexta-feira, 7 de março de 2008 09:16

Todas as Respostas

  • Para inserir mais de um controle em uma célula, use um panel no datatemplate, como em:

     

     

    <DataTemplate>

      <StackPanel Orientation="Horizontal" >

        <TextBlock Text="Texto" />

        <Image Source="Imagem.jpg" />

      </StackPanel>
    </DataTemplate>

    No mais, as coisas parecem estar corretas.

     

    Bruno

    quinta-feira, 6 de março de 2008 09:17


  • Bruno,

    Obrigado.

    Mais uma ajuda.

        -  Quanto a visualização das linhas, como faço para que apareça a linha de uma celula para outra, tipo planilha ?

       -  Como posso inserir o mesmo template que crie na 1º  linha um para as outras linhas da tabela com uma quantidade fixa de linhas, ou mesmo inserir    novas     linhas a partir de um "enter" de modo dinamico.

    No momento o listview só tem uma linha com o esquema que preciso.

    Pode me ajudar.
    Obrigado.

    Este é o código atual.

        <Grid x:Name="LayoutRoot">
            <Grid.Resources>
                <XmlDataProvider x:Key="src" XPath="/Root">
                    <x:XData>
                        <Root xmlns="">
                            <Item flag="false"/>
                        </Root>
                    </x:XData>
                </XmlDataProvider>
            </Grid.Resources>

           <ListView IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Stretch"
                            Width="Auto" Margin="0,10,0,0" Height="250" Grid.Row="1"                            
                            SelectionMode="Single" DataContext="{StaticResource src}" ItemsSource="{Binding XPath=Item}">
                            <ListView.View >
                                <GridView>
                                    <GridViewColumn Header="Item" DisplayMemberBinding="{Binding XPath=@id}" Width="50" />
                                    <GridViewColumn Header="Alternativa" Width="500">
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <TextBox x:Name="txtAlternativa" Width="500" Height="auto" />
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>
                                    </GridViewColumn>
                                    <GridViewColumn Header="Imagem" Width="175">
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <StackPanel Orientation="Horizontal" >
                                                    <Button x:Name ="bntCelula" Content="Buscar" FontSize="5" Width="40" Height="15"/>
                                                    <TextBlock x:Name="txtCaminhoImagem" Text="....."/>                                               
                                                </StackPanel>
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>
                                    </GridViewColumn>
                                    <GridViewColumn Header="Correta" Width="Auto">
                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <CheckBox IsChecked="{Binding XPath=@flag}" HorizontalAlignment="Center" />
                                            </DataTemplate>
                                        </GridViewColumn.CellTemplate>                                                                   
                                    </GridViewColumn>
                                </GridView>
                            </ListView.View>
                        </ListView>
               </Grid>



























    quinta-feira, 6 de março de 2008 11:54
  • Para inserir as linhas, você deve colocar uma borda no DataTempleate das células.

    Para fazer um template único por linha, eu faria o seguinte: não usaria a ListView e sim a ListBox. No ItemsTemplate da ListBox, crio um DataTemplate que nada mais é que um StackPanel com todas as minhas células. Veja o meu artigo no CodeProject:

    http://www.codeproject.com/KB/WPF/wpfviews.aspx

    Bruno
    quinta-feira, 6 de março de 2008 13:53

  • Bruno,

    tentei utilizar o listbox, mas nao tive muito sucesso. 
    A ideia de colocar os objetos dentro do Stack eu entendi. O problema é que não estou conseguindo usar o listBox para colocar colunas. Se é que dá para fazer isso.

    Pode me dar um exemplo do ListBox com pelo menos duas colunas, por favor.

    obrigado

    quinta-feira, 6 de março de 2008 20:11
  • Faça um ItemTemplate como o seguinte (você pode usar uma grid ao invés do StackPanel):

      <DataTemplate x:Key="ColunasTemplate">
    <StackPanel>
    <StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Path=Nome}" FontWeight="Bold" />
    <TextBlock Margin="5,0,0,0" Text="{Binding Path=Endereco}"/>
    <TextBlock Margin="5,0,0,0" Text="{Binding Path=Telefone}"/> </StackPanel>
    </StackPanel>
    </DataTemplate>
    e configure o ItemTemplate da ListBox assim:
    <ListBox HorizontalAlignment="Stretch" Margin="5" Name="listBox1" 
    VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch"
    ItemTemplate="{StaticResource ColunasTemplate}"/>

    Se quiser colocar as linhas de grid, coloque uma borda em volta de cada TextBlock:
    <Border BorderBrush="Gray">
    <TextBlock Text="{Binding Path=Nome}" FontWeight="Bold" />
    </Border>
    Se quiser colocar as colunas com tamanhos fixos, dê um Width para os TextBlocks.

    Estes dois artigos mostram como fazer uma ListBox multicolunas:
    http://blogs.msdn.com/henryh/archive/2005/06/23/431846.aspx
    http://itknowledgeexchange.techtarget.com/wpf/listbox-multi-column-example/

    Bruno

    sexta-feira, 7 de março de 2008 09:16