在我的窗口xaml:
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Setter Property="Background">
<Setter.Value>
<VisualBrush>
<VisualBrush.Visual>
<Image Source="{Binding Path=ImageSource,Converter={StaticResource imgconverter}}">
<Image.BitmapEffect>
<BlurBitmapEffect KernelType="Box" />
</Image.BitmapEffect>
</Image>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</Style>
</Grid.Style>
</Grid>
(我在窗口资源中加入了这个转换器)
我想将带有模糊效果的背景图像添加到此网格(使用MVVM模式),但我的属性从未在我的viewmodel中调用。如果我使用转换器“Path =。”转换器将工作,但我必须在conveter中使用静态ImageSource,因为如果我为ImageSource(到路径)(BitmapImage,ImageSource,..等)添加任何对象类型,转换器将不会调用。 (我尝试使用带有PropertyChanged值的UpdateSourceTrigger,但这个解决方案对我没有帮助。)转换器只是一个不需要的解决方案,因为这是唯一一种正确设置背景的方法,因为我的ImageSouce属性需要值,但是没有效果没有转换器,不幸的是,如果我添加任何绑定路径,转换器也不会工作。
这是我在ViewModel中的属性:
private ImageSource _imageSource;
public ImageSource ImageSource
{
get
{
return _imageSource;
}
set
{
_imageSource = value;
OnPropertyChanged();
}
}
有没有想法使用MVVM模式正确设置我的背景图像并且不使用uri路径? (我不想将图像保存到物理存储中)
答案 0 :(得分:1)
VisualBrush
不属于元素树,因此不会继承DataContext
的{{1}}。
但您可以将Grid
定义为资源,并使用Image
将其Source
属性绑定到父窗口的属性。这应该有效:
{x:Reference}