2

の WPF バージョンはControl.ScaleControl何ですか?


フォントをIconTitleFontに設定することで、ユーザーのフォント設定を尊重しようとしています:

private void ApplyUserFontPreferences()
{
   this.FontFamily = SystemFonts.IconFontFamily;
   this.FontSize = SystemFonts.IconFontSize;
   this.FontStyle = SystemFonts.IconFontStyle;
   this.FontWeight = SystemFonts.IconFontWeight;
}

WinForms とは異なり、フォームの内容はフォントの変更によってスケーリングされません。


ここに画像の説明を入力

後(悪い)
ここに画像の説明を入力

実際には、フォーム上のすべてのコントロール (ボタンのサイズ、リストビュー列の幅などを含む) は、新しいレイアウトに合わせてスケーリングする必要があります。

後(良い)
ここに画像の説明を入力

WPF は ( WinForms とは異なり) フォント サイズの変更に応答しないため、次の仮想的な WPF バージョンを使用して、WPF フォームを自分でスケーリングしようとすることで問題を回避しましたScaleControl

private void ApplyUserFontPreferences()
{
   Double scaleFactor = (SystemFonts.IconFontSize / this.FontSize); //i.e. new / old
   this.ScaleControl(scaleFactor); //doesn't exist

   this.FontFamily = SystemFonts.IconFontFamily;
// this.FontSize = SystemFonts.IconFontSize;
   this.FontStyle = SystemFonts.IconFontStyle;
   this.FontWeight = SystemFonts.IconFontWeight;
}

コントロール (およびすべての子コントロール) をスケーリングしたい別の例は、特定のサイズに収まるようにコントロール (およびすべての子コントロール) をスケーリングする必要がある場合です。この場合、フォーム全体を拡大縮小するのではなく、特定のコントロールのみを拡大縮小したいのです。

4

2 に答える 2

2

このソリューションはどうですか

<Window
   x:Class="WpfApplication1.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   FontSize="40"
   Loaded="Window_Loaded"
   SizeToContent="WidthAndHeight"
   Title="MainWindow">

   <Grid x:Name="LayoutRoot" Width="525" Height="350">
      <Button Width="300" Height="60" Content="Hello world"/>
      <Grid.LayoutTransform>
         <ScaleTransform x:Name="scaleTransform"/>
      </Grid.LayoutTransform>
   </Grid>
</Window>

そしてコードビハインドで

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    ApplyUserFontPreferences();
}

private void ApplyUserFontPreferences(){ 
    Double scaleFactor = (SystemFonts.IconFontSize / this.FontSize);

    this.scaleTransform.ScaleX = scaleFactor;
    this.scaleTransform.ScaleY = scaleFactor;       

    this.FontFamily = SystemFonts.IconFontFamily; 
    this.FontStyle = SystemFonts.IconFontStyle;
    this.FontWeight = SystemFonts.IconFontWeight;
}
于 2011-06-20T00:32:05.743 に答える
0

あなたが探しているものと正確に一致するかどうかはわかりませんが、WPF には自動スケーリング コントロールが含まれています: Viewbox

ちょっと手強そうなのでYMMV。最終的には、より正確な制御が必要になる可能性があるため、代わりにテンプレートの設計などに注意する必要があります。ただし、Viewbox は基本的なスケーリング機能を提供します。

参照: WPF の解像度の独立性

于 2011-06-20T17:28:33.620 に答える