Jump to content
Sign in to follow this  
rmlm

Colocar imagem e label lado a lado

Recommended Posts

rmlm

Boas,

Eu tenho um conjunto de imagens e Labels que são geradas automaticamente por código mas não consigo colocar as imagens antes das labels.

A label fica no sitio que quero mas as imagens ficam sempre no meio da grid

Fica o código de como estou a fazer:

            x = 0;
            y = 0;

            DataTable dt = new DataTable();
            dt = rmt_infos.ThrPesquisaUser(tb_email_pesquisado.Text);

            Label[] rs = new Label[dt.Rows.Count];
            Image[] img = new Image[dt.Rows.Count];
            EventosAuxiliares[] ea = new EventosAuxiliares[dt.Rows.Count];

            //Remover todos os controlos existentes
            for (int k = contem_resultados.Children.Count - 1; k >= 0; k--)
            {
                contem_resultados.Children.RemoveAt(k);
            }
            
            //Criar os novos controlos
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                ea[i] = new EventosAuxiliares(dt.Rows[i]["Nome"].ToString(), dt.Rows[i]["email"].ToString());

                img[i] = new Image();
                img[i].Margin = new Thickness(x, y, 0, 0);
                img[i].Width = 16;
                img[i].Height = 16;
                img[i].Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("/Cliente;component/Images/adicionar.png", UriKind.Relative));
                img[i].Cursor = Cursors.Hand;
                img[i].ToolTip = "Adicionar "+dt.Rows[i]["Nome"].ToString();

                img[i].MouseLeftButtonDown += new MouseButtonEventHandler(ea[i].ConfirmarAmizade);

                contem_resultados.Children.Add(img[i]);

                rs[i] = new Label();
                rs[i].Content = dt.Rows[i]["Nome"] + " - " + dt.Rows[i]["email"];
                rs[i].Margin = new Thickness(x+15, y, 0, 0);
                rs[i].ToolTip = "Clique para adicionar " + dt.Rows[i]["Nome"].ToString();
                rs[i].Cursor = Cursors.Hand;

                rs[i].MouseLeftButtonDown +=new MouseButtonEventHandler(ea[i].ConfirmarAmizade);

                contem_resultados.Children.Add(rs[i]);

                y = y + 20;
            }

Fica tambem o XAML:

        <StackPanel Height="110" HorizontalAlignment="Left" Margin="12,83,0,0" Name="stack" VerticalAlignment="Top" Width="340" CanVerticallyScroll="True" CanHorizontallyScroll="True">
            <ScrollViewer CanContentScroll="True" HorizontalScrollBarVisibility="Hidden"  Height="110" Width="340" VerticalScrollBarVisibility="Auto" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top">
                <Grid Name="contem_resultados" HorizontalAlignment="Left" VerticalAlignment="Top">
                
                </Grid>
            </ScrollViewer>
        </StackPanel>

Não estou a ver mesmo porque isto acontece... Nas aplicações "normais" fazia desta maneira e não havia problemas... mas agr no WPF não estou a ver, sou iniciante xD

Cumps

Share this post


Link to post
Share on other sites
edmolko

Penso que contem_resultados é uma Grid correto?

Nesse caso tens de indicar onde é que o controlo fica na grid:

Imagina que queres colocar um controlo na 1ª coluna e o outro na 2ª:

contem_resultados.SetColumn(img[1], 0);

contem_resultados.SetColumn(rs, 1);

Se quiseres que um controlo ocupe 2 colunas acrescentas a linha:

contem_resultados.SetColumnSpan([Controlo], 2);

Para as linhas (rows) é da mesma forma: SetRow e SetRowSpan

Share this post


Link to post
Share on other sites
rmlm

Sim, o contem_resultados é uma Grid.

mas estes comandos nao me aparecem:

contem_resultados.SetColumn(img[1], 0);
contem_resultados.SetColumn(rs, 1);

Share this post


Link to post
Share on other sites
edmolko

Vê se isto funciona:

Grid.SetColumn(img[1],0);
contem_resultados.Children.Add((img[1]);

Share this post


Link to post
Share on other sites
rmlm

Ya funciona...

mas as imagens continuam a não ficar lado a lado:

Adicionei isto:

//Para as imagens
Grid.SetColumn(img[i], 0);
Grid.SetRow(img[i], i)
contem_resultados.Children.Add(img[i]);

//Para as Labels
Grid.SetColumn(rs[i], 1);
Grid.SetRow(rs[i], i);
contem_resultados.Children.Add(rs[i]);
Olha como fica:

https://dl.dropbox.com/u/13732882/bla.png

As imagens ficam sempre um pouco abaixo da label... mas a ultima imagem fica bem... nao percebo isto  :wallbash:

Share this post


Link to post
Share on other sites
rmlm

Não estou a perceber...

Como é que adiciona depois os eventos que necessito?

Como é que eu vou buscar os valores á minha DataTable

Share this post


Link to post
Share on other sites
bruno1234

Não estou a perceber...

Como é que adiciona depois os eventos que necessito?

Como é que eu vou buscar os valores á minha DataTable

Os valores da DataTable vais buscar através de DataBind, afectas o itemsSource do teu controlo com a DataTable.

Os eventos acrescentas nos controlos que tiveres no teu template.

O melhor é veres exemplos na net, para conseguires perceber como funciona.


Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Share this post


Link to post
Share on other sites
rmlm

Bem ja tentei muita coisa mas ainda não consegui...

Não encontro exemplos de como utilizar uma DataTable e o ItemsControl

Se me pudessem arranjar um exemplo ou então uma maneira de solucionar o problema da maneira que estava a fazer no 1º post

Cumps

Share this post


Link to post
Share on other sites
rmlm

Já consegui colocar a imagem e a label lado a lado

Fiz um template:

        <DataTemplate x:Key="myTemplate">
            <StackPanel Orientation="Horizontal" Margin="0,3,3,3" Width="Auto" Cursor="Hand" Background="Transparent" >
                <Image Width="16" Height="16" Source="/Cliente;component/Images/adicionar.png" ToolTip="{Binding Nome}" MouseLeftButtonDown="adicionar" />
                <TextBlock Text="{Binding Nome}" Margin="5,0,0,0" Cursor="Hand" />
                <TextBlock Text=" - " Cursor="Hand" />
                <TextBlock Text="{Binding email}" Cursor="Hand"/>
            </StackPanel>
        </DataTemplate>

E depois utilizei uma ListBox:

<ListBox Name="lb1" ItemsSource="{Binding Tables[0]}" ItemTemplate="{StaticResource myTemplate}" Background="Transparent" BorderBrush="Transparent" SelectionMode="Single" />

Mas agora nao consigo passar o parametro para o evento da imagem...

Preciso que quando clico na imagem passe um parametro que e obitido a partir daqui; {Binding email}

Share this post


Link to post
Share on other sites
rmlm

Ok já consegui!  :cheesygrin:

Coloquei o parametro na Tag

E depois no evento é só fazer:

        private void adicionar(object sender, RoutedEventArgs e)
        {
            Image img = sender as Image;
            MessageBox.Show(img.Tag.ToString(), "Informação", MessageBoxButton.OK);
        }

Obrigado a todos pela ajuda!

Share this post


Link to post
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
Sign in to follow this  

×
×
  • 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.