Jump to content

Muli-coluna em listbox - XAML


Filipe_O
 Share

Recommended Posts

Boas!

Estou a desenvolver uma aplicação para windows phone.

Essa aplicação tem uma listbox.

Listbox essa, que terá uns resultados (items), dados pela programação.

Acontece que eu queria que esses dados aparecessem como grelha, e não em lista.

Tentei com o WrapPannel, mas não tenho essa opção (dentro da tag listbox.itemsPanel, e ScrollViewer).

Resta-me a opção de grid.

Coloquei 4 colunas e 4 linhas. tudo bem, não deu erro.

Agora, na lista, aparecem todos os items sobrepostos na mesma célula da grid.

Como poderei fazer para que cada resultado apareça numa célula diferente?

Terei de usar uma grid?

<ListBox x:Name="lista" Margin="17,208,20,217" Grid.Row="1" FontSize="21.333" Foreground="#FF006C02" Background="#006E3232" BorderBrush="#00BA1515" ScrollViewer.VerticalScrollBarVisibility="Visible" Visibility="Collapsed" FlowDirection="LeftToRight" VerticalContentAlignment="Bottom">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

Muito obrigado

Edited by Filipe_O
Link to comment
Share on other sites

Em relação a isto

Talvez mais facil seja alterar o dataTemplate em vez do PanelTemplate

Exemplo:


<ListBox ItemsSource="Binding">
           <ListBox.ItemTemplate>
               <DataTemplate>
                   <Grid>
                       <Grid.ColumnDefinitions>
                           <ColumnDefinition />
                           <ColumnDefinition />
                       </Grid.ColumnDefinitions>
                       <TextBlock Grid.Column="0" Text="Binding" />
                       <TextBlock Grid.Column="1" Text="Binding2" />
                   </Grid>
               </DataTemplate>
           </ListBox.ItemTemplate>
       </ListBox>

Cumprimentos

Rui Ganhoto

Link to comment
Share on other sites

Que tipo de dados é esse X.NomeEspecie

O que queres apresentar na coluna da esquerda e na coluna da direita?

Se pretendes usar 2 strings o ideal é teres uma classe com 2 propriedades públicas e adicionares à lista um objecto dessa classe.

Onde se lê "Binding" nos Text das textblocks, deves colocar "{Binding NomeDaPropriedade}"

Cumprimentos

Rui Ganhoto

Link to comment
Share on other sites

Que tipo de dados é esse X.NomeEspecie

String

O que queres apresentar na coluna da esquerda e na coluna da direita?

x.nomeEspecie ..exactamente o que está lá. Mas isto, é para, quando conseguir, colocar em cada célula, a imagem de cada registo da tabela, ao invés do nome.

Se pretendes usar 2 strings o ideal é teres uma classe com 2 propriedades públicas e adicionares à lista um objecto dessa classe.

Podes-me explicar melhor? datasources?

O que é a tal propriedade?

Pelo que tive a ver, de datasource, não se trata do que eu quero...

cada célula irá ter um viewbox, e aparecer o "x.imagemEspecie" (por hipotse, este nome)

Faço-me entender? Não quero por,tipo, o nome de um lado, e a imagem de outro, por exemplo.

Nem tenho esses dados pré-definidos (provém da base de dados)

   private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
   {
    List<list> dataSources = new List<list>();
    dataSources.Add(new list() { title = "Shacharit", imageSource = "Images/shacharit.png" });
    dataSources.Add(new list() { title = "Mincha", imageSource = "Images/mincha.png" });
    dataSources.Add(new list() { title = "Arvit", imageSource = "Images/arvit.png" });
    dataSources.Add(new list() { title = "Birkat HaMazon", imageSource = "Images/shacharit.png" });
    list.ItemsSource = dataSources;
   }

Aqui temos dois tipos de dados diferentes, e valores pré-definidos, por exemplo ( que é o que eu não pretendo)

Edited by Filipe_O
Link to comment
Share on other sites

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
 List<list> dataSources = new List<list>();
 dataSources.Add(new list() { title = "Shacharit", imageSource = "Images/shacharit.png" });
 dataSources.Add(new list() { title = "Mincha", imageSource = "Images/mincha.png" });
 dataSources.Add(new list() { title = "Arvit", imageSource = "Images/arvit.png" });
 dataSources.Add(new list() { title = "Birkat HaMazon", imageSource = "Images/shacharit.png" });
 list.ItemsSource = dataSources;
}

Aqui temos dois tipos de dados diferentes, e valores pré-definidos, por exemplo ( que é o que eu não pretendo)

A ideia é fazer isso que aí está mas lido através de Base de dados.

Acho que é a melhor forma de fazeres isso.

E atribuis como datasource uma lista de objectos daquele tipo que têm um Texto e uma Imagem.

Agora para começar podes colocar 2 textos.. e testar os bindings..

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.