我想在网格上设置图像。 我用2种方法来做到这一点:WPF绑定图像不工作
1)使用图像源:
<Image Source="{Binding MonitoringVM.ImgPath}"
Width="1600" Height="1600" />
当我做这种方式,图像获取显示。但它只有在宽度/高度为500时才有效。当我设置2000时,我只能看到图像的一小块。我期望它放大图像,并只显示与包含图像组件的网格大小相对应的部分,但它不起作用。
2)对于这种方法我覆盖帆布:
public class ImageCanvas : Canvas
{
public ImageSource CanvasImageSource
{
get { return (ImageSource)GetValue(CanvasImageSourceProperty); }
set { SetValue(CanvasImageSourceProperty, value); }
}
public static readonly DependencyProperty CanvasImageSourceProperty =
DependencyProperty.Register("CanvasImageSource", typeof(ImageSource),
typeof(ImageCanvas), new FrameworkPropertyMetadata(default(ImageSource)));
protected override void OnRender(System.Windows.Media.DrawingContext dc)
{
dc.DrawImage(CanvasImageSource, new Rect(this.RenderSize));
base.OnRender(dc);
}
}
但 我工作正常(包括大小操作),只有当我静态指定的路径:
<helper:ImageCanvas CanvasImageSource="/Images/img1.png"
Width="500" Height="500" >
</helper:ImageCanvas>
如果我更换它不显示任何东西:
<helper:ImageCanvas CanvasImageSource="{Binding MonitoringVM.ImgPath}"
Width="500" Height="500" >
</helper:ImageCanvas>
ViewModel是:ImgPath = @“/ Images/img1.jpg”;
你不需要那么ImageCanvas。网格(和其他一些面板)已经适当地调整了Image控件的大小。只是不要给它一个固定的大小。你现在拥有的东西没有多大意义。 – Clemens
除此之外,'img1.jpg'确实是一个方形的图像?如果没有,你可以将Image控件的'Stretch'属性设置为'UniformToFill'或'Fill',而不是默认的'Uniform'。 – Clemens
用绑定的'CanvasImageSource'测试了你的ImageCanvas。当'/ Images/img1.jpg'实际上是一个有效的资源或内容文件路径时可以正常工作。 CanvasImageSource属性应该具有与Image的Source属性不同的绑定行为。 – Clemens