写字板实例一

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="" Width="">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Menu Grid.Row="">
<MenuItem Header="File" />
<MenuItem Header="Copy" />
<MenuItem Header="Paste" />
<MenuItem Header="Cut" />
<MenuItem Header="Delete" />
</Menu>
<ToolBar Grid.Row="">
<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="" Text="WordPad" FontSize="" 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 > )
{
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="" Text="WordPad" FontSize="" TextWrapping="Wrap" Height="Auto" Width="Auto" Margin="">
<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 > ;
  pasteItem.IsEnabled = Clipboard.ContainsText();
}

TextBox同理

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

快捷键与工具栏同上

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

To be continue...

WPF学习之路(五) 实例:写字板的更多相关文章

  1. 【WPF学习】第五十章 故事板

    正如上一章介绍,WPF动画通过一组动画类(Animation类)表示.使用少数几个熟悉设置相关信息,如开始值.结束值以及持续时间.这显然使得它们非常适合于XAML.不是很清晰的时:如何为特定的事件和属 ...

  2. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

  3. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  4. 【WPF学习】第五十四章 关键帧动画

    到目前为止,看到的所有动画都使用线性插值从起点到终点.但如果需要创建具有多个分段的动画和不规则移动的动画.例如,可能希望创建一个动画,快速地将一个元素滑入到视图中,然后慢慢地将它移到正确位置.可通过创 ...

  5. 【WPF学习】第五十三章 动画类型回顾

    创建动画面临的第一个挑战是为动画选择正确的属性.期望的结果(例如,在窗口中移动元素)与需要使用的属性(在这种情况下是Canvas.Left和Canvas.Top属性)之间的关系并不总是很直观.下面是一 ...

  6. WPF学习之路(十二)控件(Items控件)

     ListBox 提供了一个选项列表,可以固定或者动态绑定 <StackPanel> <GroupBox Margin="> <GroupBox.Header& ...

  7. WPF学习之路(四)路由

    路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...

  8. WPF学习之路(五) 实例:写字板(续)

    WordPad 2.0 上一期实现了一虽然建议但是功能比较全面的Wordpad程序,但是程序代码略显繁琐,这一期更新改进版. MainWindows.xaml 添加 <Window.Comman ...

  9. WPF学习之路(十)实例:用户注册

    通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类  User.cs public class User { private string name; public string Na ...

随机推荐

  1. Asp.net Session 与Cookie的应用

    写程序的很多人都知道的,Session是服务器端的东西而Cooike是客户端的东西.因为B/S模式是无状态模式,它们的应用都是要存储客户端的某些登录或是加密的信息. Session存在于服务器端,当然 ...

  2. div css仿京东订单流程图样式代码

    效果展示 http://hovertree.com/texiao/css/25/ 本效果适合PC,也适合移动端 手机扫描二维码查看效果: 效果图: 代码如下: <!DOCTYPE html> ...

  3. linux 新建文件的命令

    图形界面下就不用说了,终端下键入: touch test.java 就创建了一个新文件 test.java http://hovertree.com/menu/linux/ http://www.cn ...

  4. script引入js文件问题

  5. Linux System Calls Hooking Method Summary

    http://www.cnblogs.com/LittleHann/p/3854977.html http://www.cnblogs.com/cozy/articles/3175615.html h ...

  6. 数据操作语言DML与运算符

    数据操作语言DML(添加,修改,删除) 1.添加数据 insert into insert into 表名 (字段列表) values (值列表),值列表要和字段列表按顺序匹配. insert int ...

  7. Sublime搭建Python开发环境

    print ('hello world!') 1. 下载python,并设置path系统环境变量:当在命令行中输入python,出现如下界面,显示安装成功. 2. 安装最新的sublime,使用注册机 ...

  8. [moka同学笔记]window下.htacess文件 与linux下.htacess文件

    windows下 # Turn on URL rewritingRewriteEngine On# Installation directoryRewriteBase /# Protect hidde ...

  9. PHP两个数组相加

    在PHP中,当两个数组相加时,会把第二个数组的取值添加到第一个数组上,同时覆盖掉下标相同的值: <?php $a = array("a" => "apple& ...

  10. [翻译]:SQL死锁-死锁排除

    As we already saw, the reasons why we have blocking issues and deadlocks in the system are pretty mu ...