跳至主要內容

標籤「XAML」的 2 篇文章

查看所有標籤

WinUI3 Button

· 3 分鐘閱讀

這篇備忘錄記錄了 WinUI3 中的 Button 控制項。

資訊

在 WinUI3 中,Button 是一個基本的交互式控制項,允許用戶通過點擊觸發應用程式中的操作。它通常用於提交表單、確認操作、導航或執行其他命令。

1. 基本用法

創建一個 Button 最簡單的方法是為其提供 Content 和處理 Click 事件。

<Button Content="點擊我" Click="MyButton_Click"/>

在後台程式碼中 (例如 MainWindow.xaml.cs):

// MainWindow.xaml.cs
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;

namespace WinUI3App
{
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
}

private void MyButton_Click(object sender, RoutedEventArgs e)
{
// 在這裡執行按鈕點擊時的操作
// 例如:
// MessageDialog dialog = new MessageDialog("按鈕被點擊了!", "提示");
// await dialog.ShowAsync();
if (sender is Button button)
{
button.Content = "已點擊!";
}
}
}
}

2. Button 的內容 (Content)

ButtonContent 屬性是 object 類型,這意味著你可以放置任何 UI 元素作為按鈕的內容,而不僅僅是文本。這使得 Button 非常靈活。

範例:文本

<Button Content="提交"/>

範例:圖標 (Icon)

通常使用 FontIconSymbolIcon 來顯示圖標。

<Button Click="SaveButton_Click">
<SymbolIcon Symbol="Save"/>
</Button>

範例:圖標和文本

你可以將 StackPanel 或其他佈局容器放置在 ButtonContent 中,以組合多個元素。

<Button Click="NewFileButton_Click">
<StackPanel Orientation="Horizontal">
<SymbolIcon Symbol="Document" Margin="0,0,8,0"/>
<TextBlock Text="新建檔案"/>
</StackPanel>
</Button>

範例:自定義圖像

<Button Click="ImageButton_Click">
<Image Source="ms-appx:///Assets/CustomIcon.png" Width="24" Height="24"/>
</Button>

3. 按鈕樣式 (Styling)

WinUI3 提供了多種內置樣式,你可以應用於按鈕,使其具有不同的視覺外觀和用途。

範例:主要按鈕 (Primary Button)

AccentButtonStyle 通常用於強調主要操作。

<Button Content="確認" Style="{StaticResource AccentButtonStyle}"/>

範例:其他標準樣式

WinUI3 提供了其他一些默認樣式,如:

  • Button (默認樣式)
  • TextButtonStyle (文本按鈕,沒有背景和邊框)
  • AppBarButtonStyle (應用程式欄按鈕樣式)
<Button Content="取消" Style="{StaticResource TextButtonStyle}"/>

範例:自定義樣式

你可以定義自己的樣式來完全控制按鈕的外觀。

<Grid>
<Grid.Resources>
<Style TargetType="Button" x:Key="CustomButtonStyle">
<Setter Property="Background" Value="LightBlue"/>
<Setter Property="Foreground" Value="DarkBlue"/>
<Setter Property="BorderBrush" Value="DarkBlue"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Padding" Value="12,8"/>
<Setter Property="CornerRadius" Value="4"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Style>
</Grid.Resources>

<Button Content="自定義按鈕" Style="{StaticResource CustomButtonStyle}"/>
</Grid>

4. 命令綁定 (Commanding)

對於 MVVM (Model-View-ViewModel) 模式,你通常會使用命令綁定而不是直接處理 Click 事件。Button 支持 Command 屬性。

<Button Content="執行命令" Command="{Binding MyCommand}"/>

在你的 ViewModel 中:

// ViewModel (例如 MyViewModel.cs)
using CommunityToolkit.Mvvm.Input; // 假設你使用 CommunityToolkit.Mvvm

public class MyViewModel : ObservableObject
{
public IRelayCommand MyCommand { get; }

public MyViewModel()
{
MyCommand = new RelayCommand(ExecuteMyCommand, CanExecuteMyCommand);
}

private void ExecuteMyCommand()
{
// 執行命令邏輯
Console.WriteLine("命令已執行!");
}

private bool CanExecuteMyCommand()
{
// 判斷命令是否可以執行
return true;
}
}

總結

WinUI3 的 Button 控制項是一個功能豐富且高度可自定義的元素。無論是簡單的文本按鈕、帶圖標的複雜按鈕,還是使用命令綁定,它都提供了強大的能力來滿足你的 UI 交互需求。通過樣式化,你可以輕鬆地使其與你的應用程式設計語言保持一致。

WinUI3 MenuFlyoutIcon

· 3 分鐘閱讀

這篇備忘錄記錄了 WinUI3 中的 MenuFlyoutIcon

資訊

在 WinUI3 中,MenuFlyoutIcon 是一個用於在 MenuFlyoutItem 中顯示圖標的控制項。它允許你為上下文菜單或主菜單中的項目添加視覺提示,提高用戶界面的可讀性和用戶體驗。

1. MenuFlyoutItemIcon

MenuFlyoutItemMenuFlyout 中的一個可點擊的項目。它本身有一個 Icon 屬性,你可以直接在其中放置圖標控制項。

範例:使用 FontIcon

最常見的方式是使用 FontIcon 顯示一個字體圖標(例如來自 Segoe Fluent Icons 字體)。

<MenuFlyout>
<MenuFlyoutItem Text="新建檔案">
<MenuFlyoutItem.Icon>
<FontIcon Glyph="&#xE7C3;" /> <!-- &#xE7C3; 是檔案圖標的 Unicode -->
</MenuFlyoutItem.Icon>
</MenuFlyadItem>
<MenuFlyoutItem Text="開啟檔案">
<MenuFlyoutItem.Icon>
<FontIcon Glyph="&#xE8E5;" /> <!-- &#xE8E5; 是資料夾圖標的 Unicode -->
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
<MenuFlyoutSeparator />
<MenuFlyoutItem Text="儲存">
<MenuFlyoutItem.Icon>
<FontIcon Glyph="&#xE74E;" /> <!-- &#xE74E; 是儲存圖標的 Unicode -->
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>

你也可以使用 SymbolIcon 來引用內置的 Symbol 枚舉,這更具可讀性。

<MenuFlyout>
<MenuFlyoutItem Text="新建檔案">
<MenuFlyoutItem.Icon>
<SymbolIcon Symbol="Document" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
<MenuFlyoutItem Text="開啟檔案">
<MenuFlyoutItem.Icon>
<SymbolIcon Symbol="Folder" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
<MenuFlyoutSeparator />
<MenuFlyoutItem Text="儲存">
<MenuFlyoutItem.Icon>
<SymbolIcon Symbol="Save" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>

範例:使用 BitmapIcon

如果你想使用圖像文件(例如 PNG 或 SVG)作為圖標,可以使用 BitmapIcon

<MenuFlyout>
<MenuFlyoutItem Text="設定">
<MenuFlyoutItem.Icon>
<BitmapIcon UriSource="ms-appx:///Assets/SettingsIcon.png" ShowAsMonochrome="False"/>
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>

確保 Assets/SettingsIcon.png 文件存在於你的專案中。ShowAsMonochrome="False" 確保圖像保持其原始顏色。

範例:使用 PathIcon

對於更複雜或自定義的矢量圖形,可以使用 PathIcon。這允許你使用 XAML 語法定義圖形路徑。

<MenuFlyout>
<MenuFlyoutItem Text="自定義圖標">
<MenuFlyoutItem.Icon>
<PathIcon Data="M10,10 L20,20 M10,20 L20,10" /> <!-- 簡單的交叉圖案 -->
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
</MenuFlyout>

2. 為什麼沒有 MenuFlyoutIcon 類?

值得注意的是,你不會在 WinUI3/UWP 的 API 文檔中找到一個名為 MenuFlyoutIcon 的直接類。這是因為 MenuFlyoutItem.Icon 屬性是一個 IconElement 類型,它是一個抽象基類。

因此,你實際上是在 MenuFlyoutItem.Icon 屬性中放置任何繼承自 IconElement 的具體圖標控制項(如 FontIconSymbolIconBitmapIconPathIcon)。這些都是用於顯示圖標的標準 WinUI 控制項,只是在 MenuFlyoutItem 的上下文中使用。

3. 最佳實踐

  • 一致性:在整個應用程式中保持圖標樣式和大小的一致性。
  • 可訪問性:確保圖標清晰可見,並考慮為視力受損用戶提供文本替代。
  • 易於理解:選擇直觀且普遍認可的圖標來代表其操作。
  • 主題適應性:如果使用 FontIconSymbolIcon,它們通常會自動適應應用程式的主題(淺色/深色模式)。對於 BitmapIcon,如果希望它們也能適應,可能需要提供不同主題下的圖像資源。

總結

在 WinUI3 中為 MenuFlyoutItem 添加圖標是通過其 Icon 屬性實現的,該屬性接受任何 IconElement 派生類。最常用的是 FontIconSymbolIcon,因為它們輕量且易於與應用程式主題集成。正確使用圖標可以顯著提高應用程式的可用性和視覺吸引力。