私は3つのモデルを1つ使用して描画するサードパーティのアプリケーションを使用しています。 height
、width
、およびposition
をライブラリに送信すると、送信した値に応じて3Dデザインが表示されます。実際の高さと幅が正確に動作しないようにサイズを変更する
以下のイメージは、ビューがレンダリングされる場所を示し、紫色の領域は赤色の境界線を示しています。 あなたは右下隅に見ることができるように、私は、ユーザーコントロールと、このコードを使用して内部の境界線の両方のための実際の高さと幅印刷した:
<DockPanel>
<TextBlock DockPanel.Dock="Bottom" HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding ActualHeight, StringFormat={}{0}: height, RelativeSource={RelativeSource AncestorType=UserControl}}" />
<TextBlock DockPanel.Dock="Bottom" HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding ActualHeight, StringFormat={}{0}: border height, RelativeSource={RelativeSource AncestorType=Border}}" />
<TextBlock DockPanel.Dock="Bottom" HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding ActualWidth, StringFormat={}{0}: width, RelativeSource={RelativeSource AncestorType=UserControl}}" />
<TextBlock DockPanel.Dock="Bottom" HorizontalAlignment="Right" VerticalAlignment="Bottom" Text="{Binding ActualWidth, StringFormat={}{0}: border width, RelativeSource={RelativeSource AncestorType=Border}}" />
</DockPanel>
をしてきたとき、私は同じ結果を得ましたライブラリにそれらを送信するための背後にあるコードから実際の高さと幅:
Point position = Application.Current.MainWindow.PointToScreen(new Point(0d, 0d));
var pointToScreen = PointToScreen(new Point(0d, 0d));
pointToScreen.X -= position.X;
pointToScreen.Y -= position.Y;
var actualHeight = this.ActualHeight;
var actualWidth = this.ActualWidth;
var actualBorderHeight = renderBorder.ActualHeight;
var actualBorderWidth = renderBorder.ActualWidth;
を使用してエリアをチェックするとき、私は同じ結果を得ました
をご覧ください。結果は643、幅はです。
レンダリングされたビューは、実際の領域より常に小さくなります。私はスクリーンショットを取って、塗料アプリケーションを使用して、私はの高さは772であり、幅は1763です。だから私はそれらの値をペイントから得たものとまったく同じものにして、私の望む通りにビューをレンダリングしました。
ので、正確に何が起こっているのでしょうか?正しい値をどうやって得るのでしょうか?