2009-11-23 10 views
5

Ich versuche, Stil zu verwenden, löst in Silverlight, wie so:Stil löst 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> 

ich dies so tun möchten, dass die Füllwerts des Pfades ändert sich, wenn die Pumpe läuft oder nicht. Das Problem ist, dass Style-Trigger in Silverlight nicht unterstützt werden!

Also gibt es das sowieso? Gibt es eine Möglichkeit, dies im Code zu tun? Ich habe es mir angeschaut, aber ich bin ratlos.

Dank

Ian

Antwort

13

A-Wandler benutzerdefinierten Wert ein ähnliches Ziel erreichen.

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"); 
    } 
} 

Mit diesem Konverter an Ort und Stelle können Sie Ihre XAML anpassen, um: -

<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> 

Beachten Sie, dass seit Ihrer Farbwahl auf Ihre Wegvorgabe lokalen war ich direkt eine Instanz des Converter eingebettet haben in meine Pfaddefinition erhält somit dieselbe Semantik. Wenn Sie jedoch eine Anzahl dieser Konvertierungen mit den gleichen Paarfarben benötigen, können Sie die Converter-Instanz genauso einfach in eine Seitenressource einfügen und die normale Kurzschreibebindungssyntax verwenden.