2009-11-23 21 views
5

Sto cercando di utilizzare lo stile trigger in Silverlight in questo modo:Style innesca in Silverlight

<Path Canvas.Top="20" Stroke="#FF808080" Data="M 0,20 20,0 40,20 Z" StrokeLineJoin="Round"> 
     <Path.Style> 
      <Style TargetType="{x:Type Path}"> 
       <Setter Property="Fill" Value="DarkGray"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=userControl, Path=PumpRunning}" Value="True"> 
         <Setter Property="Fill" Value="DarkGreen"/>   
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Path.Style> 
    </Path> 

che voglio fare questo in modo che il valore di riempimento del tracciato cambia se la pompa è in funzione o meno. Il problema è che i trigger di stile non sono supportati in silverlight!

Quindi c'è comunque intorno a questo? C'è un modo per farlo nel codice? Ho esaminato ma sono perplesso.

Grazie

Ian convertitore di valori

risposta

13

Un personalizzato raggiungere un obiettivo simile.

public class BoolToBrushConverter : IValueConverter 
{ 
    public Brush FalseBrush { get; set; } 
    public Brush TrueBrush { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    if (value == null) 
    return FalseBrush; 
    else 
    return (bool)value ? TrueBrush : FalseBrush; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    throw new NotImplementedException("This converter only works for one way binding"); 
    } 
} 

Con questo convertitore in atto è possibile regolare il vostro XAML per: -

<Path Canvas.Top="20" Stroke="#FF808080" Data="M 0,20 20,0 40,20 Z" StrokeLineJoin="Round"> 
    <Path.Fill> 
    <Binding Path="PumpRunning" ElementName="userControl"> 
    <Binding.Converter> 
    <local:BoolToBrushConverter 
     FalseBrush="DarkGray" TrueBrush="DarkGreen" /> 
    </Binding.Converter> 
    </Binding> 
    </Path.Fill> 
</Path> 

Nota che, poiché la vostra scelta di colore era locale alla definizione del percorso che hai incorporato un'istanza del convertitore direttamente in la mia definizione di Path in tal modo acheiving lo stesso semantico. Tuttavia, se si richiede un numero di queste conversioni utilizzando gli stessi colori della coppia, è possibile posizionare l'istanza del convertitore in una risorsa della pagina e utilizzare la normale sintassi di associazione abbreviata.