我想在網格上設置圖像。 我用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