wpf listbox change les éléments individuels en gras
Question
Je souhaite que certains éléments soient en gras, en fonction de la propriété d'un objet que je mets dans la liste.
Je pense que vous pouvez le faire en changeant de modèle, mais vous n'arrivez pas à trouver un exemple.
Merci!
La solution
Vous pouvez le faire plus simplement si vous utilisez un convertisseur (IntToFontWeightConverter, par exemple).
Configurer un modèle d'élément:
<DataTemplate x:Key="BoldTemplate">
<TextBlock
FontWeight="{Binding Path=Position, Converter={StaticResource IntToFontWeightConverter}}"
Text="{Binding Path=Name}"
/>
</DataTemplate>
où Nom est ce que vous voulez afficher et Position est votre propriété sur laquelle vous basez les caractères gras / normal.
Créez votre convertisseur (en fonction du type de propriété sur lequel vous basez les caractères gras).
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
}
Autres conseils
Vous pouvez le faire en utilisant DataTriggers. Pour un exemple simple d'utilisation d'un DataTrigger, vous pouvez consulter http://manicprogrammer.com/cs/blogs/willeke/archive/2007/04/25/datatriggers-are-very-cool.aspx
Voici un exemple d'utilisation de ListView, mais la même chose s'applique à une Listbox.
<ListView x:Name="Notes" Margin="4,4,4,4"
ItemsSource="{Binding Path=CurrentCustomer.CustomerNotes}"
ItemTemplate="{DynamicResource CustomerNotesDataTemplate}"
Style="{DynamicResource ListViewStyle1}" />
Ensuite, le ItemTemplate est dans les ressources de ma fenêtre:
<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>
Et enfin, le style avec les DataTriggers est également dans les ressources de ma fenêtre.
<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>
Mon exemple est probablement beaucoup plus détaillé que nécessaire, mais je l'ai extrait directement de l'une de mes applications.