2016-07-27 133 views
3

我已經在清單中指定了Landscape和LandscapeFlipped,我知道這只是一個偏好,並且在此之上,我在App.xaml.cs的OnLaunched中添加了下面的代碼。但是,當在平板電腦上進行測試時,該應用會回到肖像模式。如何在UWP應用程序中只啓用橫向模式?

DisplayInformation.AutoRotationPreferences = 
        DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped; 

還有什麼替代方法可以在模擬器而不是實際的平板電腦/設備上測試這個嗎?

在此先感謝。

+1

很明顯,你只能通過使用Interops來達到這個目的[這裏](http://stackoverflow.com/a/16162546/4558029) – lokusking

+0

謝謝你的幫助。 – AbsoluteSith

+0

這部分代碼在我的應用程序中沒有效果。該應用程序仍在旋轉。 – mbob

回答

3

由於我的意見幫你即時將其添加爲答案

Reference

解決方案

[DllImport("user32.dll", EntryPoint = "#2507")] 
extern static bool SetAutoRotation(bool bEnable); 

SetAutoRotation(false); 
+0

真的沒有其他辦法嗎?你也知道這個互通電話是否會通過商店認證嗎? –

+1

此功能在任何地方都沒有記錄或支持。它不會通過商店認證甚至任何形式的Win32認證。請不要使用它(永遠)。 MSFT保留隨時刪除它的權利。 –

+1

這部分解決了我的問題。它會阻擋設備上的方向,而不是應用程序。這是正確的方法嗎? – mbob

0

使用了正確的API來強制UWP應用的方向,但你可以參考官方DisplayOrientations enumeration,在備註部分:

應用程序通常使用該屬性的加速計的讀數翻譯或根據當前屏幕旋轉來翻譯物理按鈕事件。

這意味着,這些工作,但只有當設備有加速度計,筆記本電腦甚至模擬器,他們沒有任何效果。

還有什麼替代方法可以在模擬器而不是實際的平板電腦/設備上測試這個嗎?

不,模擬器不適合,你可以在手機或移動模擬器上進行測試。

2

首先記:在DisplayInformation.AutoRotationPreferences提供大致相同的功能Win32 SetDisplayAutoRotationPreferences函數,但DisplayInformation函數用於UWP,Win32函數用於Win32應用程序(例如HWND)。你不能在Win32應用程序中使用UWP API,反之亦然。

UWP API僅用於設備在Windows 10上處於Tablet模式時工作。自動旋轉也必須由用戶打開,設備需要有加速計。一般來說,您的應用程序也需要成爲前臺窗口才能運行。

現在您已經知道API的所有要求(順便說一句,這是一個方向「首選項」),它是否仍然無法正常工作?目的是用戶仍然控制着體驗。

在某些情況下,我看到開發人員試圖將此API用於自定義OEM設備,並始終在Kiosk模式下運行單個應用程序。 API是爲普通應用程序場景設計的,而不是針對信息亭場景。如果您有這樣的場景,那麼理想情況下,您可以只描述要驅動的硬件配置(如普通的OEM設備 - 例如編寫ACPI表和固件),操作系統將使用正確的方向。如果您只是構建一次性設備,則可以考慮在啓動時使用SetDisplayConfig從Win32應用程序設置屏幕旋轉,而不是完全依賴自動旋轉。

相關問題