WinUI 3 C++ 控制項篇-選擇與開關控制項

本章節將介紹 WinUI 3 C++ 中各式用於選擇、切換狀態的控制項。

控制項原名繁體中文名稱
CheckBox多選核取方塊
RadioButton單選按鈕(同一 GroupName 互斥)
ToggleSwitch滑動開關
ComboBox下拉選單
ComboBoxItem下拉選單選項
ListBox固定高度清單(無虛擬化)
ListBoxItemListBox 清單項目
SelectorBar橫向分頁選擇列
SelectorBarItem分頁標籤項目
TreeView樹狀階層檢視
TreeViewItem樹節點項目
RatingControl星級評分控制項

下方示範這些常用控制項的完整 XAML 程式碼。

不同 SDK 版本細節會略有差異,本範例使用 Visual Studio 2022。

<?xml version="1.0" encoding="utf-8"?>
<Window
    x:Class="App6.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App6"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Title="App6 控制項示範">

    <ScrollViewer Padding="30" VerticalScrollBarVisibility="Auto">
        <StackPanel Spacing="35">
            <!-- 1. CheckBox 多選核取方塊 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="1. CheckBox - 多選核取方塊" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <CheckBox Content="選項 A" IsChecked="True"/>
                    <CheckBox Content="選項 B"/>
                    <CheckBox Content="選項 C" IsThreeState="True"/>
                </StackPanel>
            </Border>

            <!-- 2. RadioButton 分組單選按鈕 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="2. RadioButton - 分組單選按鈕(GroupName)" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <TextBlock Text="性別群組(GroupName=Gender)"/>
                    <RadioButton GroupName="Gender" Content="男性" IsChecked="True"/>
                    <RadioButton GroupName="Gender" Content="女性"/>
                    <RadioButton GroupName="Gender" Content="不願透露"/>
                    <TextBlock Margin="0,10,0,0" Text="年齡區間(GroupName=Age)"/>
                    <RadioButton GroupName="Age" Content="未滿 18 歲"/>
                    <RadioButton GroupName="Age" Content="18–30 歲"/>
                    <RadioButton GroupName="Age" Content="30 歲以上"/>
                </StackPanel>
            </Border>

            <!-- 3. ToggleSwitch 滑動切換開關 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="3. ToggleSwitch - 滑動切換開關" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <StackPanel Orientation="Horizontal" Spacing="20" VerticalAlignment="Center">
                        <ToggleSwitch Header="自動同步" IsOn="True"/>
                        <ToggleSwitch Header="深色模式" OffContent="關閉" OnContent="開啟"/>
                    </StackPanel>
                </StackPanel>
            </Border>

            <!-- 4. ComboBox 下拉單選清單 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="4. ComboBox - 下拉單選清單" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <ComboBox Width="260" SelectedIndex="1">
                        <ComboBoxItem Content="紐約"/>
                        <ComboBoxItem Content="倫敦"/>
                        <ComboBoxItem Content="香港"/>
                        <ComboBoxItem Content="東京"/>
                    </ComboBox>
                </StackPanel>
            </Border>

            <!-- 5. ListBox 固定高度單/多選清單 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="5. ListBox - 固定高度單/多選清單" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <ListBox Width="280" Height="140" SelectionMode="Multiple">
                        <ListBoxItem Content="文件"/>
                        <ListBoxItem Content="圖片"/>
                        <ListBoxItem Content="影片"/>
                        <ListBoxItem Content="音訊"/>
                        <ListBoxItem Content="安裝程式"/>
                    </ListBox>
                </StackPanel>
            </Border>

            <!-- 6. ListView 虛擬化高效能清單(大量資料建議使用) -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="6. ListView - 虛擬化高效能清單(大量資料建議使用)" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <ListView Width="320" Height="160" SelectionMode="Single">
                        <ListViewItem>
                            <StackPanel Orientation="Horizontal" Spacing="10">
                                <SymbolIcon Symbol="Document"/>
                                <TextBlock Text="資料項目 001"/>
                            </StackPanel>
                        </ListViewItem>
                        <ListViewItem>
                            <StackPanel Orientation="Horizontal" Spacing="10">
                                <SymbolIcon Symbol="Document"/>
                                <TextBlock Text="資料項目 002"/>
                            </StackPanel>
                        </ListViewItem>
                        <ListViewItem>
                            <StackPanel Orientation="Horizontal" Spacing="10">
                                <SymbolIcon Symbol="Document"/>
                                <TextBlock Text="資料項目 003"/>
                            </StackPanel>
                        </ListViewItem>
                    </ListView>
                </StackPanel>
            </Border>

            <!-- 7. GridView 網格卡片排版 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="7. GridView - 網格卡片排版" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <GridView Width="500" Height="180">
                        <GridView.ItemContainerStyle>
                            <Style TargetType="GridViewItem">
                                <Setter Property="Width" Value="110"/>
                                <Setter Property="Height" Value="100"/>
                            </Style>
                        </GridView.ItemContainerStyle>
                        <GridViewItem>
                            <Border Background="LightBlue" Margin="5" CornerRadius="6">
                                <TextBlock Text="卡片 1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </GridViewItem>
                        <GridViewItem>
                            <Border Background="LightGreen" Margin="5" CornerRadius="6">
                                <TextBlock Text="卡片 2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </GridViewItem>
                        <GridViewItem>
                            <Border Background="LightSalmon" Margin="5" CornerRadius="6">
                                <TextBlock Text="卡片 3" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </GridViewItem>
                        <GridViewItem>
                            <Border Background="LightPink" Margin="5" CornerRadius="6">
                                <TextBlock Text="卡片 4" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </GridViewItem>
                        <GridViewItem>
                            <Border Background="LightGoldenrodYellow" Margin="5" CornerRadius="6">
                                <TextBlock Text="卡片 5" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </GridViewItem>
                        <GridViewItem>
                            <Border Background="LightCyan" Margin="5" CornerRadius="6">
                                <TextBlock Text="卡片 6" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </GridViewItem>
                    </GridView>
                </StackPanel>
            </Border>

            <!-- 9. SelectorBar 橫向分頁選擇列 -->
            <Border Padding="14" BorderThickness="1" BorderBrush="Gray" CornerRadius="8">
                <StackPanel Spacing="12">
                    <TextBlock Text="9. SelectorBar - 橫向分頁選擇列" FontWeight="SemiBold" FontSize="14" Margin="0,0,0,8"/>
                    <SelectorBar Width="450">
                        <SelectorBarItem Text="首頁">
                            <SelectorBarItem.Icon>
                                <SymbolIcon Symbol="Home"/>
                            </SelectorBarItem.Icon>
                        </SelectorBarItem>
                        <SelectorBarItem Text="訊息">
                            <SelectorBarItem.Icon>
                                <SymbolIcon Symbol="Message"/>
                            </SelectorBarItem.Icon>
                        </SelectorBarItem>
                        <SelectorBarItem Text="檔案">
                            <SelectorBarItem.Icon>
                                <SymbolIcon Symbol="Folder"/>
                            </SelectorBarItem.Icon>
                        </SelectorBarItem>

                    </SelectorBar>
                </StackPanel>
            </Border>
        </StackPanel>
    </ScrollViewer>
</Window>Code language: HTML, XML (xml)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *