我有一个自定义方法,它返回一个将用作背景的画笔:
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!它的返回被分配给背景,它确实需要一个画笔。
项目编译并运行,但当它到达所有这些东西的页面时,它只是打破了“未处理的异常”而没有别的东西可以看。
中间有一些我不知道的东西。有人可以帮忙吗?
答案 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,类似于与转换器的绑定,如果你想对它进行一些额外的控制。