2009-11-23 2 views
5

Я пытаюсь использовать стиль триггеров в Silverlight как так:Стиль запускает в 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> 

Я хочу, чтобы это сделать так, чтобы значение заполнения пути изменяется, если насос работает или нет. Проблема в том, что триггеры стиля не поддерживаются в silverlight!

Так все равно вокруг этого? Есть ли способ сделать это в коде? Я просмотрел его, но я в тупике.

Благодаря

Ian

ответ

13

Пользовательский преобразователь значение достигнет той же цели.

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

С помощью этого конвертера на месте вы можете настроить XAML для: -

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

Обратите внимание, что, так как ваш выбор цвета был локальным для определения Path Я встроенный экземпляр конвертера непосредственно в мое определение пути, таким образом, приобретает ту же семантику. Однако, если вам требуется несколько таких преобразований с использованием тех же парных цветов, вы можете просто разместить экземпляр конвертера в ресурсе страницы и использовать синтаксис нормального сокращения привязки.

Смежные вопросы