mudança de caixa de listagem itens individuais WPF para negrito
Pergunta
Eu quero que alguns dos itens de ser ousado, dependendo de uma propriedade de um objeto que eu estou colocando em caixa de listagem.
Eu acho que você pode fazê-lo com modelos de mudança, mas não consigo encontrar um exemplo.
Obrigado!
Solução
Você pode fazê-lo de forma mais simples do que se você usar um conversor (IntToFontWeightConverter, por exemplo).
Configurar um modelo de item:
<DataTemplate x:Key="BoldTemplate">
<TextBlock
FontWeight="{Binding Path=Position, Converter={StaticResource IntToFontWeightConverter}}"
Text="{Binding Path=Name}"
/>
</DataTemplate>
onde Nome é o que você deseja exibir, e posição é a sua propriedade que você está baseando a negrito / normais diante.
Criar o seu conversor (dependendo do tipo da propriedade que você basear o em negrito).
class IntToFontWeightConverter :IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((int)value == 1)
{
return FontWeights.Bold;
}
return FontWeights.Normal;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Outras dicas
Você pode fazer isso usando DataTriggers. Para um exemplo simples de usar um DataTrigger você pode verificar http://manicprogrammer.com/cs/blogs/willeke/archive/2007/04/25/datatriggers-are-very-cool.aspx
Aqui está um exemplo usando um ListView, mas a mesma coisa applys para uma caixa de listagem.
<ListView x:Name="Notes" Margin="4,4,4,4"
ItemsSource="{Binding Path=CurrentCustomer.CustomerNotes}"
ItemTemplate="{DynamicResource CustomerNotesDataTemplate}"
Style="{DynamicResource ListViewStyle1}" />
Então, o ItemTemplate é em Recursos da minha janela:
<DataTemplate x:Key="CustomerNotesDataTemplate">
<Grid MinWidth="400" Style="{DynamicResource NotesRowTriggers}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="74"/>
<ColumnDefinition Width="400"/>
<ColumnDefinition Width="125"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Top" Text="{Binding Path=NoteDate, Converter={StaticResource ShortDateConverter}}" Margin="0,0,4,0" />
<TextBlock Text="{Binding Path=FreeNote}" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4,0,0,0" Grid.ColumnSpan="1" TextWrapping="Wrap" />
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" Text="{Binding Path=NoteUser}" Grid.Column="2" Width="110" d:LayoutOverrides="Width" Margin="4,0,0,0" Grid.ColumnSpan="1" />
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding Path=Highlight}" VerticalAlignment="Top" Content="Important" Grid.Column="3" Margin="4,0,4,0"/>
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding Path=Important}" VerticalAlignment="Top" Content="Alert" Grid.Column="4" Margin="4,0,4,0"/>
</Grid>
</DataTemplate>
E, finalmente, o estilo com o DataTriggers também está em Recursos da minha janela.
<Style x:Key="NotesRowTriggers" TargetType="{x:Type Grid}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Important}" Value="True">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Red" Opacity="0.3" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Highlight}" Value="True">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Red" Opacity="0.6" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
Meu exemplo é provavelmente muito mais detalhado do que ele precisa ser, mas eu só puxou-o em linha reta de um dos meus apps.