WPF绑定图像无效

时间:2017-02-11 14:07:07

标签: c# wpf data-binding

我正在尝试在网格上设置图像。 我用了两种方法来做到这一点:

1)使用图像源:

<Image Source="{Binding MonitoringVM.ImgPath}" 
            Width="1600" Height="1600"  />

当我这样做时,图像会显示出来。但它只有在宽度/高度为500时才有效。当我设置2000时,我只能看到图像的一小部分。我希望它能够放大图像并仅显示与包含图像组件的网格大小相对应的部分,但它不起作用。

2)对于这种方法,我覆盖了Canvas:

 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);
        }
    }

BUT 只有当我静态指定路径时,我才能正常工作(包括大小操作):

<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 = @&#34; /Images/img1.jpg" ;;

1 个答案:

答案 0 :(得分:0)

您的ImageCanvas是多余的,因为它的行为类似于ImageStretch设为Fill

所以写下这个:

<Image Source="{Binding MonitoringVM.ImgPath}" Stretch="Fill" Width="500" Height="500" />