Ian*_*nah 5 silverlight triggers coding-style
我试图在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>
Run Code Online (Sandbox Code Playgroud)
我想这样做,以便在泵运行或不运行时路径的填充值发生变化.问题是silverlight不支持样式触发器!
那么无论如何围绕这个?有没有办法在代码中执行此操作?我已经调查过了,但我很难过.
谢谢
伊恩
Ant*_*nes 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");
}
}
Run Code Online (Sandbox Code Playgroud)
使用此转换器,您可以将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>
Run Code Online (Sandbox Code Playgroud)
请注意,由于您的颜色选择是Path定义的本地选择,因此我将Converter的实例直接嵌入到Path定义中,从而实现相同的语义.但是,如果您需要使用相同的对颜色进行大量这些转换,则可以轻松地将Converter实例放在页面资源中并使用常规的速记绑定语法.