私は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サイズ またはデフォルトのマージンやパディングを計算する際に境界線の太さを考慮に入れていないので、
BorderThicknessは2でデルタながらです画像とポップアップの両方に余白やパディングの定義がないので、それらはすべてゼロになるはずです。 – Lon