zoukankan      html  css  js  c++  java
  • WPF学习之路(五) 实例:写字板

     写字板实例一

    MainWindow.xaml

    <Window x:Class="Wordpad01.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="WordPad1.0" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Menu Grid.Row="0">
                <MenuItem Header="File" />
                <MenuItem Header="Copy" />
                <MenuItem Header="Paste" />
                <MenuItem Header="Cut" />
                <MenuItem Header="Delete" />
            </Menu>
            <ToolBar Grid.Row="1">
                <Button>
                    <Image Source="/Images/Copy.png" />
                </Button>
                <Button>
                    <Image Source="/Images/Paste.png" />
                </Button>
                <Button>
                    <Image Source="/Images/Cut.png" />
                </Button>
                <Button>
                    <Image Source="/Images/Delete.png" />
                </Button>
            </ToolBar>
            <TextBox x:Name="text" Grid.Row="2" Text="WordPad" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </Grid>
    </Window>

     主要依靠Clipboard类实现

     为Button添加Click时间

     <MenuItem Header="Copy" Click="CopyClick" />

     <Button Click="CopyClick">

    private void CopyClick(object sender, RoutedEventArgs e)
    {
        if (text.Text != null && text.Text.Length > 0)
        {
            Clipboard.SetText(text.Text);
        }
    }
    
    private void PasteClick(object sender, RoutedEventArgs e)
    {
        if (Clipboard.ContainsText())
        {
            text.Text = Clipboard.GetText();
        }
    }
    
    private void CutClick(object sender, RoutedEventArgs e)
    {
        CopyClick(sender, e);
        DeleteClick(sender, e);
    }
    
    private void DeleteClick(object sender, RoutedEventArgs e)
    {
        text.Text = null;
    }

     添加右键菜单

    <TextBox x:Name="text" Grid.Row="2" Text="WordPad" FontSize="30" TextWrapping="Wrap" Height="Auto" Width="Auto" Margin="5">
                <TextBox.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Copy" Click="CopyClick" />
                        <MenuItem Header="Paste" Click="PasteClick" />
                        <MenuItem Header="Cut" Click="CutClick" />
                        <MenuItem Header="Delete" Click="DeleteClick" />
                    </ContextMenu>
                </TextBox.ContextMenu>
    </TextBox>

    添加快捷键 KeyGesture

    private KeyGesture gestCopy = new KeyGesture(Key.C, ModifierKeys.Control);
    private KeyGesture gestPaste = new KeyGesture(Key.V, ModifierKeys.Control);
    private KeyGesture gestCut = new KeyGesture(Key.X, ModifierKeys.Control);
    private KeyGesture gestDelete= new KeyGesture(Key.Delete);
    
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        base.OnPreviewKeyDown(e);
        e.Handled = true;
        if (gestCopy.Matches(null, e))
        {
            CopyClick(this, e);
        }
        else if (gestPaste.Matches(null, e))
        {
            PasteClick(this, e);
        }
        else if (gestCut.Matches(null, e))
        {
            CutClick(this, e);
        }
        else if (gestDelete.Matches(null, e))
        {
            DeleteClick(this, e);
        }
    }

    添加状态控制

    菜单栏

    <MenuItem Header="File" SubmenuOpened="MenuItem_SubmenuOpened"/>
    <MenuItem x:Name="copyItem" Header="Copy" Click="CopyClick" />
    <MenuItem x:Name="pasteItem" Header="Paste" Click="PasteClick" />
    <MenuItem x:Name="cutItem" Header="Cut" Click="CutClick" />
    <MenuItem x:Name="deleteItem" Header="Delete" Click="DeleteClick" />
    private void MenuItem_SubmenuOpened(object sender, RoutedEventArgs e)
    {
      cutItem.IsEnabled = copyItem.IsEnabled = deleteItem.IsEnabled 
         = text.Text != null && text.Text.Length > 0;
      pasteItem.IsEnabled = Clipboard.ContainsText();
    }

    TextBox同理

    <TextBox x:Name="text" ContextMenuOpening="text_ContextMenuOpening">

    快捷键与工具栏同上

    一个简易的写字板程序完成了,但是有没有发现很麻烦呢,下一期更新WordPad2.0版

    To be continue...

  • 相关阅读:
    优雅的使用Python之软件管理
    优雅的使用python之环境管理
    SpriteSheet精灵动画引擎
    【译】AS3利用CPU缓存
    走在网页游戏开发的路上(十一)
    自定义路径创建Cocos2d-x项目
    C++静态库与动态库
    C++对象模型
    超时空英雄传说2复仇魔神完全攻略&秘技
    从头写个http client(java)
  • 原文地址:https://www.cnblogs.com/alex09/p/4432268.html
Copyright © 2011-2022 走看看