如何将样式绑定到控件

时间:2016-03-25 17:37:16

标签: c# wpf

我尝试为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.

这个问题的最佳解决方案是什么?

2 个答案:

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