2017-06-21 17 views
3

WPFアプリケーションをすべてのシステムスケールで同じサイズにする方法はありますか?WPFアプリケーションはすべてのシステムスケールで同じサイズ(スケールに依存しません)

私はフルHD画面で125%からテキスト、アプリケーションやWindowsのシステム設定で、他の項目サイズ変更(推奨)%のを変更すると、私のWPFアプリケーションが小さすぎ取得します。

private void ScaleTo125Percents() 
{ 
    // Change scale of window content 
    MainContainer.LayoutTransform = new ScaleTransform(1.25, 1.25, 0, 0); 
    Width *= 1.25; 
    Height *= 1.25; 

    // Bring window center screen 
    var screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight; 
    var screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth; 
    Top = (screenHeight - Height)/2; 
    Left = (screenWidth - Width)/2; 
} 

しかし、この関数を呼び出すための条件があります:独立したシステム規模のアプリケーションを実装するために私は戻って125%に私のアプリのスケーリングを変更するには、このような関数を書いてきました。最初の画面はFull-HD(これをチェックするためのAPIがあります)で、システムの規模は100%(システム規模を得るための.NET APIはありません)でなければなりません。

どうすればよいですか?アプリケーションシステムの規模を独立させるための標準的な方法はありますか?

私が見てきた規模の独立したアプリケーションの例:

  • のVisual Studio 2017インストーラー
  • 電報デスクトップ
+0

'Viewbox'レイアウトコンテナチェックアウト:https://blog.udemy.com/wpf-viewbox/ –

+0

@BradleyUffner' Viewbox'変更を要素のサイズを変更して拡大縮小します。私は、システム設定に基づいて静的なスケールが必要です。私はそれが助けてくれるとは思わない。 – 0xaryan

+0

私はあなたが「規模に左右されない」と言うときにあなたが求めていることを十分に理解しているとは思わない。 'Viewbox'はあなたに特定の仮想サイズのキャンバスを与えることができます。アプリケーションのウィンドウサイズやシステムDPIにかかわらず、 'Viewbox 'が常に指定されたサイズであるかのように、その中に配置されたすべてが表示され、レイアウトされます。たぶんさまざまなサイズでコンテンツがどのように振る舞うかの図が役立つでしょう。 –

答えて

2

は最後に答えを見つけました。 Computer\HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetricsにあるレジストリAppliedDPI DWORDから

  • 読む:まず、以下のいずれかのオプションを使用して、システムDPIスケールを取得します。次いで96
  • ことによってそれを分割またはこのスニペットを使用:

    1.0
  • 2.5から

の間の値を返し、次にアプリケーション設定を保持している設定ファイルを作成しようdpiFactor設定

double dpiFactor = System.Windows.PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice.M11; 

デフォルトの縮尺。ユーザーがカスタムスケールを優先した場合、ウィンドウの起動時にこの関数を呼び出す:

private void UserInterfaceCustomScale(double customScale) 
{ 
    // Change scale of window content 
    MainContainer.LayoutTransform = new ScaleTransform(customScale, customScale, 0, 0); 
    Width *= customScale; 
    Height *= customScale; 

    // Bring window center screen 
    var screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight; 
    var screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth; 
    Top = (screenHeight - Height)/2; 
    Left = (screenWidth - Width)/2; 
} 
関連する問題