我尝试为Image制作闪烁样式,我打算动态分配此样式,并为具有依赖项属性HasError的某些图像指定此样式,当HasErro = True时,图像闪烁,否则不闪烁,样式设置为null。 / p>
这是我的风格正常运作:
<Image x:Name="imgErro" Style="{Binding HasError, Converter={StaticResource ErrorBooleanAnimate}, ElementName=userControl}"/>
这是我的样式绑定:
public class ErrorBooleanAnimate : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is bool?))
return null;
if ((bool)value == true)
{
// Solution 1
//return "{DynamicResource myImageAnimateStyle}";
// Solution 2
Style newStyle = (Style)Application.Current.TryFindResource("myImageAnimateStyle");
return newStyle;
}
else
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这是我的Value转换器,有两个解决方案,但不起作用:
IF(["#YearsofService"]=>2,"2+ Years" else "Less than 2 Years") else Terminate(has a date) is not null.
这个问题的最佳解决方案是什么?
答案 0 :(得分:3)
您需要在App资源下定义资源才能使代码正常运行。
如果你想在UserControl资源下定义它,你需要将userControl实例传递给转换器并搜索它的资源。
(Style)userControl.TryFindResource("myImageAnimateStyle");
答案 1 :(得分:0)
您可以将样式传递给转换器:
<Image Style="{Binding HasError,
Converter={StaticResource ErrorBooleanAnimate},
ConverterParameter={StaticResource myImageAnimateStyle},
RelativeSource={RelativeSource Self}}"/>
只需在转换器中返回parameter
。