你的位置:首页 > ASP.net教程

[ASP.net教程]WPF学习之路(五) 实例:写字板


 写字板实例一

 

MainWindow.xaml

<Window x:Class="Wordpad01.MainWindow"    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    ="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...