我有一个要在其中设置背景图像的用户控件。如果我这样做,它将起作用:
视图:
<UserControl.Background>
<ImageBrush AlignmentX="Center" AlignmentY="Center" Stretch="Uniform" Opacity="0.25" ImageSource="{Binding Logo}">
<ImageBrush.RelativeTransform>
<ScaleTransform ScaleX="0.75" ScaleY="0.75" CenterX=".5" CenterY="0.5" />
</ImageBrush.RelativeTransform>
</ImageBrush>
</UserControl.Background>
视图模型中的属性:
private byte[] _logo = GlobalVariables.Logo;
public byte[] Logo
{
get { return _logo; }
set
{
_logo = value;
base.RaisePropertyChangedEvent("Logo");
}
}
在启动应用程序时,我真的将徽标加载到了全局变量中,因为徽标存储在数据库中,因此我只需要加载一次,而不是每次要打印文档时都要加载。
所以这是一个全局变量,我试图直接从全局变量中获取徽标,这样就可以避免在视图模型中具有属性的需要。
所以在我看来,我正在尝试以下代码:
<UserControl.Background>
<ImageBrush AlignmentX="Center" AlignmentY="Center" Stretch="Uniform" Opacity="0.25" ImageSource="{x:Static vg:GlobalVariables.Logo}">
<ImageBrush.RelativeTransform>
<ScaleTransform ScaleX="0.75" ScaleY="0.75" CenterX=".5" CenterY="0.5" />
</ImageBrush.RelativeTransform>
</ImageBrush>
</UserControl.Background>
在这种情况下,出现以下错误:
'System.Byte []'没有真正意义上的'ImageSource'。
我不明白为什么,因为在可行的示例中,我的视图模型中的属性也是Byte [],实际上,在我的视图模型中,我正在将glbal变量设置为该属性。
谢谢。
答案 0 :(得分:2)
使用静态属性Binding受益于内置类型转换(显然,StaticExtension并未使用):
class Something {
void tutu() {
...
var list = new List<Data>();
var data = new Data("caca", "toto");
list.add(data);
... use list ...
}
}
请注意,<ImageBrush ImageSource="{Binding Path=(vg:GlobalVariables.Logo)}" .../>
应该是此处的公共静态属性。
如果它是一个静态字段,则可以这样编写Binding:
Logo