グリッド上にイメージを設定しようとしています。 私はそれを行うには、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";
:
だからこれを書きます。グリッド(および他のいくつかのパネル)は、すでにイメージコントロールを適切にリサイズします。固定サイズにしないでください。あなたが今持っていることはあまり意味がありません。 – Clemens
それ以外に、 'img1.jpg'は本当に正方形の画像ですか?もしそうでなければ、デフォルトのUniformではなく、Imageコントロールの 'Stretch'プロパティを' UniformToFill'または 'Fill'に設定することができます。 – Clemens
ImageCanvasを「CanvasImageSource」というバインドでテストしました。 '/ Images/img1.jpg'が実際に有効なリソースまたはコンテンツファイルのパスであるときにうまく動作します。あなたの 'CanvasImageSource'プロパティがImageの' Source'プロパティとは異なるバインディング動作を持つべき理由はありません。 – Clemens