自定义方法的返回类型与XAML中的预期不同

时间:2014-10-11 22:18:46

标签: c# xaml windows-phone

我有一个自定义方法,它返回一个将用作背景的画笔:

class ListBoxBackgroundSelector : BackgroundBrushSelector
{
    public Brush fondo1 { get; set; }
    public Brush fondo2 { get; set; }
    private static bool usado = false;

    public override Brush SelectBrushStyle(object item, DependencyObject container)
    {
        Brush fondo = null;
        if (usado)
        {
            fondo = fondo1;
        }
        else
        {
            fondo = fondo2;
        }

        usado = !usado;

        return fondo;
    }

从扩展类

扩展而来
public abstract class BackgroundBrushSelector : ContentControl
{
    public abstract Brush SelectBrushStyle(object item, DependencyObject container);

    protected override void OnContentChanged(object oldContent, object newContent)
    {
        base.OnContentChanged(oldContent, newContent);

       Background  = SelectBrushStyle(newContent, this);
    }
}

我在以下XAML声明中使用它

<Grid.Background>
   <local:ListBoxBackgroundSelector Background="{Binding}" fondo1="#19001F5B" fondo2="#FFFFFFFF" />
</Grid.Background>

但Visual Studio突出显示 local:ListBoxBackgroundSelector 行,并显示错误

  

无法分配特定值。预期值为“刷”

但该方法返回一个Brush!它的返回被分配给背景,它确实需要一个画笔。

项目编译并运行,但当它到达所有这些东西的页面时,它只是打破了“未处理的异常”而没有别的东西可以看。

中间有一些我不知道的东西。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您编写的方法会返回一个画笔,但您没有将该方法放在Background中,而是放置了继承自ContentControl的类。我看到它的方式,你现在有几个选择。对我来说最明显的是将绑定放置到任何控制背景状态的控件上,并添加一个转换器来返回正确的画笔,如下所示:

public class BackgroundConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return new SolidColorBrush((bool)value ? Colors.Red : Colors.Blue);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

或者您可以将已有的课程作为主要控件放在视图中。

另一种选择是创建一个自己的MarkupExtension,类似于与转换器的绑定,如果你想对它进行一些额外的控制。