Usuário com melhor resposta
Qual o evento do ListBox que devo usar?

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>();
Respostas
-
Você pode usar um conversor implementando a interface IValueConverter para isso, dá uma olhada nesse link que é quase igual o que você precisa:
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- Marcado como Resposta Thiago MonacoModerator segunda-feira, 10 de outubro de 2011 12:02
-
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:
[]'s
-- André Carlucci - Way2 Technology - twitter/andrecarlucci- Marcado como Resposta Thiago MonacoModerator segunda-feira, 10 de outubro de 2011 12:02
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:
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- Marcado como Resposta Thiago MonacoModerator segunda-feira, 10 de outubro de 2011 12:02
-
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:
[]'s
-- André Carlucci - Way2 Technology - twitter/andrecarlucci- Marcado como Resposta Thiago MonacoModerator segunda-feira, 10 de outubro de 2011 12:02