對wpf的入門記錄總結---菜單menu與命令

概念

在大部分Windows應用程序中,通常我們的菜單(Menu)會至於窗口頂部,但是在WPF中爲了保證較高的靈活性,實際上你可以在窗體的任意位置放置菜單控件(Menu Control),菜單控件(Menu Control)的高度和寬度也可以任由你的設定。

<Window x:Class="菜單.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:菜單"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="200">
 
    <DockPanel>
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="_File">
               <MenuItem Header="_New" />
                <MenuItem Header="_Open" />
                <MenuItem Header="_Save" />
                <Separator />
                <MenuItem Header="_Exit" />
                  
            </MenuItem>
        </Menu>

        <TextBox AcceptsReturn="True" Name="txtEditor" />
    </DockPanel>
</Window>

在這裏插入圖片描述
一個標籤的第一個字符前有一個下劃線(_)。在WPF的Meun控件中,這樣的命名規則意味着窗體將會接收到相應的快捷鍵用於激活Meun中的子條目。這將會以從頂層依次向下展開層次的子項目的方式工作,在該例程中,如果按下Alt鍵的同時,依次按下F鍵,然後按下N鍵,那麼標籤名爲New的子條目將會被選中激活。

處理單擊

最簡單的方法是向MenuItem添加一個click事件處理程序,就像這樣:

<MenuItem Header="_New" Click="mnuNew_Click" />

但更常見的方法是使用WPF命令。在使用命令時,WPF會自動響應鍵盤快捷鍵。 菜單項的文本(Header)也會自動設置

<Window x:Class="菜單.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:菜單"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="200">
    <Window.CommandBindings>
        <CommandBinding Command="New" CanExecute="CommonCommandBinding_CanExecute" />
        <CommandBinding Command="Open" CanExecute="CommonCommandBinding_CanExecute" />
        <CommandBinding Command="Save" CanExecute="CommonCommandBinding_CanExecute" />
    </Window.CommandBindings>
    <DockPanel>
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="_File">
                <MenuItem Command="New" />
                <Separator />
                <MenuItem Header="_Exit" />
            </MenuItem>
            <MenuItem Header="_Edit">
                <MenuItem Command="Cut" />
                <MenuItem Command="Copy" />
                <MenuItem Command="Paste" />
                <MenuItem Command="Open" />
                <MenuItem Command="Save" />
                <MenuItem Command="Find" />
            </MenuItem>
        </Menu>

        <TextBox AcceptsReturn="True" Name="txtEditor" />
    </DockPanel>
</Window>

using System.Windows;
using System.Windows.Input;

namespace 菜單
{
    /// <summary>
    /// MainWindow.xaml 的交互邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void CommonCommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }
    }
}

在這裏插入圖片描述
這個示例告訴4個道理:
① wpf內置命令可以簡寫,如new,cut,save
② 簡單的事件處理CanExecute,在綁定時可以共用一個
③wpf內置命令中的paste,cut,copy,完全不需要指明綁定到textbox,它能自動實現,而new,save,open等命令必須由用戶自己實現邏輯。
④用內置命令和菜單menu結合,就算沒有實現邏輯,起碼也響應了鍵盤快捷鍵, 菜單項的文本(Header)也會根據命令描述自動設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章