2016-11-13 20 views
0

私はWPFコンテンツスケーリングシステムを理解していると思っていましたが、私にとって不思議な問題に遭遇しました。私は、ユーザーが画像をクリックしたときに画像の上に開くルーペとして使用されるはずの非常に単純なポップアップを持っています。 XAMLはこれです:背後にあるコードで画面上のポップアップサイズ

<Popup Name="LoupePopup" AllowsTransparency="True" IsOpen="False" StaysOpen="True"> 
     <Border BorderThickness="2" BorderBrush="Azure" /> 
    </Popup> 

、私はその後、ポップアップが開かれたときにすでに表示された画像にポップアップの配置を結びます。私はこのコードの画像の半分のサイズにルーペのサイズを設定します。

LoupePopup.PlacementTarget = FullImg; 
    LoupePopup.Placement = PlacementMode.Relative; 
    LoupePopup.Width = FullImg.ActualWidth/2; 
    LoupePopup.Height = FullImg.ActualHeight/2; 

さらにコードは、その後のMouseMoveと一緒にルーペを移動し、それが本当にここでの問題に関連していない:私はルーペを期待します画像の幅/高さのちょうど半分になるようにしますが、そうではありません - それはかなり大きくなります(約18%)。実際の画像サイズと、それが表示されているウィンドウの実際のサイズとマウス座標を確認しました。これらの次元/点座標はすべて理にかなっていますが、ポップアップでは他の要素と同じ幅/高さのスケーリングを使用しないのはなぜですか?

説明のために:画像は画面の80%程度をカバーしているため、これは単なる少数のピクセルの問題ではありません。ウィンドウはコードで作成された子ウィンドウで、ポップアップはメインウィンドウのXAMLで定義されていますが、両方のウィンドウはフルスクリーンサイズに設定されています。

あなたの考えを気に入ってください!ポップアップや画像のLoupePopupサイズ またはデフォルトのマージンやパディングを計算する際に境界線の太さを考慮に入れていないので、

答えて

0

もっと多くのオプションを試した後、私は子供対メインウインドウの側面が問題を引き起こしたことを認識しなければなりませんでした。子ウィンドウに画像が表示されていました。メインウィンドウでポップアップが定義されました。ポップアップXAMLを子ウィンドウに移動した後、ポップアップのサイズが正しくなりました。

ない(両方のウィンドウはフルスクリーンの寸法を有し、同じスケーリングを使用する必要がありますが、少なくとも、これは私の問題を解決し、なぜ私は理解してください。助けようとしてくれてありがとう!

0

は、多分それはそうです

+0

BorderThicknessは2でデルタながらです画像とポップアップの両方に余白やパディングの定義がないので、それらはすべてゼロになるはずです。 – Lon

0

私はわからないんだけど、私はあなたが見ているべきだと思いますStretch画像の特性。イメージに定義されている幅と高さがある場合、ActualWidth/-HeightはStretchプロパティの影響を受けます。 Fillに設定すると、ActualWidth/-Heightが定義された幅と高さになります。

+0

あなたの考えを気に入っていますが、私が見ている問題は次のとおりです。画像ではなく、正確に表示し、ActualWidthとActualHeightは、あなたが期待していたものとまったく同じです。画像の幅と高さのプロパティは実際には定義されていません。サイズは、グリッドのサイズ細胞。 – Lon

+0

@ロン:それから私は知らない。 'LoupePopup.ActualWidth'と' LoupePopup.ActualHeight'は 'LoupePopup.Width/-Height'と比較して何か –

+1

幅と高さは、あなたが持っていると思われるサイズをWPFエンジンに伝えるコードで使用する設定です可能。 ActualWidthとActualHeightは、レンダリングが完了したらWPFエンジンが返すレポートです。彼らは同じかもしれませんが、異なるかもしれません。いずれにしても、実際の値のみが表示されるUIElementのサイズを実際に指示します。 – Lon

関連する問題