Window.SizeChanged 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
當視窗的渲染大小改變時,會發生這種情況。
// Register
event_token SizeChanged(TypedEventHandler<IInspectable, WindowSizeChangedEventArgs const&> const& handler) const;
// Revoke with event_token
void SizeChanged(event_token const* cookie) const;
// Revoke with event_revoker
Window::SizeChanged_revoker SizeChanged(auto_revoke_t, TypedEventHandler<IInspectable, WindowSizeChangedEventArgs const&> const& handler) const;
public event TypedEventHandler<object,WindowSizeChangedEventArgs> SizeChanged;
function onSizeChanged(eventArgs) { /* Your code */ }
window.addEventListener("sizechanged", onSizeChanged);
window.removeEventListener("sizechanged", onSizeChanged);
- or -
window.onsizechanged = onSizeChanged;
Public Custom Event SizeChanged As TypedEventHandler(Of Object, WindowSizeChangedEventArgs)
事件類型
TypedEventHandler<IInspectable,WindowSizeChangedEventArgs>
備註
此事件發生於視窗邊 界 值變動時。 這可能是因為使用者在最大化應用程式時調整了你的應用程式大小或改變了顯示方向。 另一個觸發因素是使用者將應用程式移到解析度不同的新顯示器。
處理 SizeChanged 應用程式介面中的事件,例如視窗大小變動時移動元素。 XAML 使用的 是有效像素 (epx),而非實際的實體像素。 有效像素是一種虛擬的度量單位,用來表達版面尺寸和間距,與螢幕密度無關。 Bounds 的高度和寬度值和 WindowSizeChangedEventArgs 的高度和寬度值是一樣的,所以你可以在事件處理程序中使用任一。
更多資訊請參閱 WinUI 與 Windows 應用程式 SDK 的視窗概覽。
如果你在 FrameworkElement.Loaded 事件的處理程序中,在頁面層級附加一個 handler for SizeChanged ,你應該會將 FrameworkElement.Unloaded 事件處理器中的handler從該頁面分離出來。
視窗實例在頁面導覽間保持活躍,且應該只對最新的頁面程式碼有處理器啟動。
導覽
你可能想偵測視窗從橫向變成直向,或反之。 視窗的方向可能會影響你希望應用程式內各個控制項的呈現方式。 例如,你可能想在 ListView 中顯示資料清單以進行直向,但在 GridView 中顯示以呈現橫向。 通常你會比較 與 Width 的 Height 比例,以根據視窗 界限來判斷方向,並且每當 Window.SizeChanged 發生時都會這麼做。 你如何解讀 Width/Height 比例由你決定。
最小與最大尺寸
不要用 SizeChanged 處理器來強制執行應用程式可調整的最大或最小大小。 相反地,請使用以下 OverlappedPresenter 屬性:
不過,你改變視覺狀態的邏輯應該能載入一個設計成你想要最小寬度的狀態,通常你會用 Bounds 值和 Window.SizeChanged 處理來偵測應用程式視窗是否使用最小寬度。
想了解更多如何用 Window.SizeChanged 偵測應用程式視窗環境變化並載入適合應用程式的視覺狀態,請參見 XAML 的響應式版面。
其他規模變動事件
還有其他幾個事件可以用來偵測大小變化。
AppWindow
AppWindow 類別有一個 Changed 事件,事件 args 的 DidSizeChange 值。
與 XAML 視窗類別不同,AppWindow 使用 視窗座標系統,其基本測量單位為實體裝置像素。 所以可以用 AppWindow API 來做視窗操作,比如調整視窗大小或移動視窗與螢幕上其他物件的關係。
FrameworkElement (框架元素)
還有一個叫 SizeChanged 的事件存在於 FrameworkElement 衍生型別(Window 不是 FrameworkElement 型別)。
FrameworkElement.SizeChanged 事件可能發生在許多導致 Window.SizeChanged 事件發生的相同情況下。 應用程式視窗大小的改變可能導致根視覺元素(通常是 頁面 或面板)的大小改變。 這會引發一連串的佈局失效,針對任何使用自適應佈局來填補可用空間的子元素。 每個因 layout pass 而產生新維度的元素都會觸發其自己的 FrameworkElement.SizeChanged 事件。