none
Qual o evento do ListBox que devo usar? RRS feed

  • Pergunta

  • Pessoal, 
    tenho um listbox com vários itens dentro, sendo que no momento que rola o bind para popular o listbox, eu gostaria de verificar o status de cada registro e mudar a cor de fundo de acordo com cada status, alguém poderia me ajudar?

    Segue abaixo parte de meu código hoje:

    <ListBox x:Name="lstTransacao" SelectionChanged="lstTransacao_SelectionChanged" Margin="0,74,0,0" d:IsLocked="True" Height="424" VerticalAlignment="Top">
    
                            <ListBox.ItemTemplate>
    
                                <DataTemplate>
    
                                    <StackPanel Orientation="Horizontal">
    
                                        <StackPanel Margin="10">
    
                                            <TextBlock Margin="5" Width="250"
    
                                              TextWrapping="Wrap"
    
                                              VerticalAlignment="Top"
    
                                              
    
                                              HorizontalAlignment="Left"
    
                                              Text="{Binding Path=DtCadastro}" />
    
                                            <TextBlock Margin="5" Width="250"
    
                                              TextWrapping="Wrap"
    
                                              VerticalAlignment="Top"
    
                                              HorizontalAlignment="Left"
    
                                              Text="{Binding Path=Descricao}" FontSize="23" />
    
    
    
    
    
                                            <TextBlock Margin="6" Width="250"
    
                                              TextWrapping="Wrap"
    
                                              VerticalAlignment="Top"
    
                                              HorizontalAlignment="Left"
    
                                              Text="{Binding Path=Valor}" FontSize="23" />
    
    
    
    
    
                                        </StackPanel>
    
                                    </StackPanel>
    
                                </DataTemplate>
    
                            </ListBox.ItemTemplate>
    
                        </ListBox>
    
    
    
    

     

    Bind aqui

    lstTransacao.ItemsSource = (from t in linq.Transacao
                                            where t.DtCadastro.Month.Equals(mes) && t.DtCadastro.Year.Equals(ano)
                                            orderby t.DtCadastro ascending
                                            select t).ToList<Transacao>();
    


     

    quinta-feira, 6 de outubro de 2011 00:10

Respostas

  • Você pode usar um conversor implementando a interface IValueConverter para isso, dá uma olhada nesse link que é quase igual o que você precisa:

    http://social.msdn.microsoft.com/Forums/en/windowsphone7series/thread/f9e9ce26-d576-45f8-a79d-762176695385


    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    MCC - Microsoft Community Contributor
    www.maestrodotnet.com.br
    @BrunoMaestro

    quinta-feira, 6 de outubro de 2011 02:43
  • Se é somente a cor que você quer mudar, o IValueConverter no background do seu StackPanel mais externo é o mais indicado como o Bruno falou.

    Declare no UserControl.Resources:

     

    <Converters:ColorConverter x:Key="ColorConverter" />
    

    E no seu StackPanel mais externo:

     

    <StackPanel Background="{Binding Selected, Converter={StaticResource ColorConverter}}" >
    

     

    E seu converter poderia ser:

    public class ColorConverter : IValueConverter {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
                string key = (bool)value ? "PhoneSubtleBrush" : "PhoneForegroundBrush";
                SolidColorBrush colorBrush = (SolidColorBrush) Application.Current.Resources[key];
                return colorBrush;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
                throw new NotImplementedException();
            }
        }
    

    Caso tenha que mudar mais coisas de acordo com o registro, uma solução mais abrangente é utilizar um DataTemplateSelector.

    Basicamente o DataTemplateSelector vai aplicar um DataTemplate completo a cada item com base em alguma regra que você escolher.  Aqui você pode encontrar um ótimo exemplo:

    http://www.windowsphonegeek.com/articles/Implementing-Windows-Phone-7-DataTemplateSelector-and-CustomDataTemplateSelector

    []'s


    -- André Carlucci - Way2 Technology - twitter/andrecarlucci
    sexta-feira, 7 de outubro de 2011 15:05
    Moderador

Todas as Respostas

  • Você pode usar um conversor implementando a interface IValueConverter para isso, dá uma olhada nesse link que é quase igual o que você precisa:

    http://social.msdn.microsoft.com/Forums/en/windowsphone7series/thread/f9e9ce26-d576-45f8-a79d-762176695385


    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    MCC - Microsoft Community Contributor
    www.maestrodotnet.com.br
    @BrunoMaestro

    quinta-feira, 6 de outubro de 2011 02:43
  • Se é somente a cor que você quer mudar, o IValueConverter no background do seu StackPanel mais externo é o mais indicado como o Bruno falou.

    Declare no UserControl.Resources:

     

    <Converters:ColorConverter x:Key="ColorConverter" />
    

    E no seu StackPanel mais externo:

     

    <StackPanel Background="{Binding Selected, Converter={StaticResource ColorConverter}}" >
    

     

    E seu converter poderia ser:

    public class ColorConverter : IValueConverter {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
                string key = (bool)value ? "PhoneSubtleBrush" : "PhoneForegroundBrush";
                SolidColorBrush colorBrush = (SolidColorBrush) Application.Current.Resources[key];
                return colorBrush;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
                throw new NotImplementedException();
            }
        }
    

    Caso tenha que mudar mais coisas de acordo com o registro, uma solução mais abrangente é utilizar um DataTemplateSelector.

    Basicamente o DataTemplateSelector vai aplicar um DataTemplate completo a cada item com base em alguma regra que você escolher.  Aqui você pode encontrar um ótimo exemplo:

    http://www.windowsphonegeek.com/articles/Implementing-Windows-Phone-7-DataTemplateSelector-and-CustomDataTemplateSelector

    []'s


    -- André Carlucci - Way2 Technology - twitter/andrecarlucci
    sexta-feira, 7 de outubro de 2011 15:05
    Moderador