使用 AdaptiveTrigger 更改 UI 佈局

UWP 應用程式可以在視窗模式和多個裝置上執行。它們可以在各種螢幕尺寸上顯示,從低端手機到巨大的表面中心螢幕。使用相對定位對於很多場景來說已經足夠了,但隨著視窗大小的增加,通過將頁面控制元件移動到不同位置來完全更改佈局總是很有趣。

在此示例中,我們將在窄螢幕上使用垂直佈局,在寬螢幕上使用水平佈局。在巨大的寬螢幕上,我們也會改變物品的尺寸。

<Border x:Name="item2"
        Background="Aquamarine"
        Width="50"
        Height="50">
    <TextBlock Text="Item 2"
               VerticalAlignment="Center"
               HorizontalAlignment="Center" />
</Border>

<Border x:Name="item3"
        Background="LightCoral"
        Width="50"
        Height="50">
    <TextBlock Text="Item 3"
               VerticalAlignment="Center"
               HorizontalAlignment="Center" />
</Border>

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup>

        <VisualState x:Name="ultrawide">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="800" />
            </VisualState.StateTriggers>

            <VisualState.Setters>
                <Setter Target="mainPanel.Orientation" Value="Horizontal" />
                <Setter Target="item1.Width" Value="100" />
                <Setter Target="item1.Height" Value="100" />
                <Setter Target="item2.Width" Value="100" />
                <Setter Target="item2.Height" Value="100" />
                <Setter Target="item3.Width" Value="100" />
                <Setter Target="item3.Height" Value="100" />
            </VisualState.Setters>
        </VisualState>

        <VisualState x:Name="wide">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="600" />
            </VisualState.StateTriggers>

            <VisualState.Setters>
                <Setter Target="mainPanel.Orientation" Value="Horizontal" />
            </VisualState.Setters>
        </VisualState>

        <VisualState x:Name="narrow" />
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

調整視窗大小時,系統會將當前視窗的寬度與 AdaptiveTrigger 的最小寬度進行比較。如果當前寬度大於或等於最小寬度,則將啟用觸發器並顯示相應的 VisualState。

這是不同狀態的輸出

狹窄 StackOverflow 文件

StackOverflow 文件

超寬 StackOverflow 文件