2017-02-11 5 views
-1

グリッド上にイメージを設定しようとしています。 私はそれを行うには、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";

+1

だからこれを書きます。グリッド(および他のいくつかのパネル)は、すでにイメージコントロールを適切にリサイズします。固定サイズにしないでください。あなたが今持っていることはあまり意味がありません。 – Clemens

+0

それ以外に、 'img1.jpg'は本当に正方形の画像ですか?もしそうでなければ、デフォルトのUniformではなく、Imageコントロールの 'Stretch'プロパティを' UniformToFill'または 'Fill'に設定することができます。 – Clemens

+0

ImageCanvasを「CanvasImageSource」というバインドでテストしました。 '/ Images/img1.jpg'が実際に有効なリソースまたはコンテンツファイルのパスであるときにうまく動作します。あなたの 'CanvasImageSource'プロパティがImageの' Source'プロパティとは異なるバインディング動作を持つべき理由はありません。 – Clemens

答えて

0

あなたのImageCanvasは、StretchFillに設定されたImageコントロールのように動作するため、冗長です。あなたがImageCanvasことを必要としない

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

500x500の画像。私が必要とするのは、5000x5000のような画像を拡大することですが、同時にこの拡大画像の500x500枚だけを表示したいのです。 –

+0

次に、必要に応じてサイズを設定します。 Stretch = Fillを使用すると、ImageCanvasのようにImageコントロールが正確に動作します。 – Clemens

+0

申し訳ありませんが、plsは私の前のコメントを無視します。私はそれが修正されていない間違っていた。私はまだ画像を拡大できません。 5000x5000と表示します。 400x400 –

関連する問題