2009-12-03 8 views
4

Silverlight ne dispose pas de DataTrigger, donc dans ce cas ... quel pourrait être le meilleur moyen de définir conditionnellement le poids de police d'un élément dans un booléen?Lier FontWeight à un booléen dans Silverlight

Par exemple ... ce qui suit n'est pas possible dans Silverlight.

<TextBlock Text="{Binding Text}"> 
    <TextBlock.Triggers> 
     <DataTrigger Binding="{Binding IsDefault}" Value="True"> 
      <Setter Property="FontWeight" Value="Bold"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsDefault}" Value="False"> 
      <Setter Property="FontWeight" Value="Normal"/> 
     </DataTrigger> 
    </TextBlock.Triggers> 
</TextBlock> 

Merci!

Répondre

10

Vous pouvez mettre en place un IValueConverter qui convertit un bool à un FontWeight, et l'utiliser comme convertisseur de fixation:

<UserControl.Resources> 
    <local:BoolToFontWeightConverter x:Key="boolToFontWeight"/> 
</UserControl.Resources> 

... 

<TextBlock Text="{Binding Text}" FontWeight="{Binding IsDefault, Converter={StaticResource boolToFontWeight}}"> 
1

Créer une IValueConverter personnalisée, lient le FontWeight à IsDefault, et convertir vrai, gras et faux à la normale

+0

Salut @Rich un exemple de code que vous pouvez fournir pour obtenir le même résultat? – highlander141

8

Je voudrais effectivement utiliser un convertisseur booléen à style. Ensuite, dans la section des ressources, vous devez définir les 2 propriétés de style public.

public class BoolToStyleConverter : IValueConverter 
{ 
    public Style TrueStyle { get; set; } 
    public Style FalseStyle { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((bool)value) ? TrueStyle : FalseStyle; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

<localHelpers:BoolToStyleConverter x:Key="boolToHistoryTextBlockStyleConverter"> 
    <localHelpers:BoolToStyleConverter.TrueStyle> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="Red"></Setter> 
     </Style> 
    </localHelpers:BoolToStyleConverter.TrueStyle> 
    <localHelpers:BoolToStyleConverter.FalseStyle> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="Black"></Setter> 
     </Style> 
    </localHelpers:BoolToStyleConverter.FalseStyle> 
</localHelpers:BoolToStyleConverter> 

Cet exemple définit la couleur de premier plan, mais vous pouvez définir n'importe quel style. Pour lier cela, vous devez définir le convertisseur, dans ce cas si IsCommentChange est True, le texte sera en rouge, s'il est faux, il est noir.

<TextBlock Name="tbComment" Text="{Binding Path=Comment,Mode=OneTime}" 
TextWrapping="Wrap" 
    Style="{Binding Path=IsCommentChanged, 
    Converter={StaticResource boolToHistoryTextBlockStyleConverter}}" /> 
+0

Certainement plus flexible. Merci pour le code. – Den

Questions connexes