2008-12-04 9 views

Répondre

4

Vous pouvez le faire plus simplement si vous utilisez un convertisseur (IntToFontWeightConverter, par exemple).

Mettre en place 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 la position est votre propriété que vous basez le gras/normal.

Créez votre convertisseur (en fonction du type de propriété sur lequel vous avez basé le 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 
} 
5

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 utilisant 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}" /> 

Alors 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 bavard qu'il doit être, mais je juste tiré de ce droit une de mes applications.

Questions connexes