だから、私はWPFのスケーリングを理解していないか、すべての解決策があまりにも複雑です。バックグラウンドは、私は親UserControlとその子をスケールする必要があります。同時に、あまりにもスマートな私のXAMLを避けようとしています。だから、私はWPFでのスケーリングに別の(より簡単な)アプローチをしようとしています。WPFスケーリングの異なるアプローチ:DesignPropertiesへのアクセス?
まず、SizeChangedイベントを登録します。新しいサイズと前のサイズ(両方ともイベントパラメータから提供される)から、幅と高さの比率を計算し、それを各子要素に適用してサイズを変更します。シンプルに聞こえる。ただし、UserControlが実際に生成されると、SizeChangedイベントが初めて発生します。この時点で、「古い」高さと幅は両方とも0(またはNaN)です。
private void ScaleElement(FrameworkElement element,
double previousWidth, double previousHeight,
double newWidth, double newHeight)
{
double scalingFactorX;
double scalingFactorY;
scalingFactorX = newWidth/previousWidth;
scalingFactorY = newHeight/previousHeight;
double elementRelativePosX = element.Margin.Left/previousWidth;
double elementRelativePosY = element.Margin.Top/previousHeight;
element.Margin = new Thickness(newWidth * elementRelativePosX, newHeight * elementRelativePosY, 0, 0);
element.Width *= scalingFactorX;
element.Height *= scalingFactorY;
}
私は非existant「古い」のサイズを変更することで、この最初の発射イベントを処理したいと思います:;(NaNのに問題があることを無視して単純化)ここで
は、私は、現時点でそれを行う方法ですデザイン時に意図されたUserControlのサイズを使用します。私は間違っている可能性がありますが、XAMLはDesignProperties.DesignWidth(XAML:例えばd:DesignWidth = "300")という静的プロパティを示します。どういうわけかこれにアクセスできますか?そうでない場合は、プログラム的に問題を解決する(または一般的にスケーリングする)別の方法がありますか?前もって感謝します。
は、あなたが本当に(すなわち、フォントサイズをdescresing /増加など)をスケールするかをまたはちょうどあなたのコントロールのサイズを変更? – kev
スケール - UserControlの子コントロール。 – RolandK