wpf 研习1-24小时自学wpf8

A real-world program

 

basic application layout

  

<Window x:Class="TextEditor.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                Title="Text Editor"
                Height="600"
                Width="800">
        <DockPanel>
                <Menu x:Name="menu"
                            DockPanel.Dock="Top" />
                <ToolBarTray x:Name="toolbar"
                                      DockPanel.Dock="Top" />
                <StatusBar DockPanel.Dock="Bottom">
                        <TextBlock x:Name="status" />
                </StatusBar>
                <RichTextBox x:Name="body"
                                      SpellCheck.IsEnabled="True"
                                      AcceptsReturn="True"
                                      AcceptsTab="True"
                                      BorderThickness="0 2 0 0" />
        </DockPanel>
</Window> 

 
toolbars with quick-access

<ToolBarTray>
     <ToolBar>
         <Button ToolTip="Open">
               <Image Source="Icons/folder_page.png" />
         </Button>
         <Button ToolTip="Save">
               <Image Source="Icons/page_save.png" />
         </Button>
     </ToolBar>
</ToolBarTray>


increasing maintainability

导入xml名字空间:xmlns:name="clrnamespace:clrNamespace;

                                                assembly=assembly.dll"

 

TextEditorToolbar.xaml.cs代码

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
   for (double i = 8; i < 48; i += 2)
   {
      fontSize.Items.Add(i);
   }
}

 

<UserControl x:Class="TextEditor.TextEditorToolbar"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      Loaded="UserControl_Loaded">
        <ToolBarTray>
               <ToolBar>
                   <Button ToolTip="Open">
                           <Image Source="Icons/folder_page.png" />
                   </Button>
                   <Button ToolTip="Save">
                           <Image Source="Icons/page_save.png" />
                   </Button>
               </ToolBar>

.........

 

using menu



 

TextEditorMenu.xaml.cs代码

private void About_Click(object sender, RoutedEventArgs e)
{
      MessageBox.Show("Teach Yourself WPF in 24 Hours - Text Editor”,"About”);
}

 

<UserControl x:Class="TextEditor.TextEditorMenu"
                         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Menu>
        <MenuItem Header="_File">
           <MenuItem Header="_New" />
           <MenuItem Header="_Open" />
           <MenuItem Header="_Save" />
           <MenuItem Header="Save As" />
           <Separator />
                  <MenuItem Header="_Print" />
           <Separator />
           <MenuItem Header="Close" />
        </MenuItem>

 .......

 

RichTextBox

FlowDocument(Powerful!Some of the major features supported by FlowDocument are Block elements like Paragraph, Section, List, and Table. When these elements are combined with those mentioned earlier in this hour, almost any document layout can be achieved.);

ItemsControl;

TextRange(To save or load the content of a RichTextBox);

 

DocumentManager.cs

using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using Microsoft.Win32;

namespace TextEditor
{
    public class DocumentManager
    {
        private string _currentFile;
        private readonly RichTextBox _textBox;

        public DocumentManager(RichTextBox textBox)
        {
            _textBox = textBox;
        }

        public bool CanSaveDocument()
        {
            return !string.IsNullOrEmpty(_currentFile);
        }

        public void ApplyToSelection(DependencyProperty property, object value)
        {
            if (value != null)
                _textBox.Selection.ApplyPropertyValue(property, value);
        }

        public void NewDocument()
        {
            _currentFile = null;
            _textBox.Document = new FlowDocument();
        }

        public bool OpenDocument()
        {
            OpenFileDialog dlg = new OpenFileDialog();

            if (dlg.ShowDialog() == true)
            {
                _currentFile = dlg.FileName;

                using (Stream stream = dlg.OpenFile())
                {
                    TextRange range = new TextRange(_textBox.Document.ContentStart, _textBox.Document.ContentEnd);
                    range.Load(stream, DataFormats.Rtf);
                }

                return true;
            }

            return false;
        }

        public bool SaveDocument()
        {
            if (string.IsNullOrEmpty(_currentFile)) return SaveDocumentAs();
            else
            {
                using (Stream stream = new FileStream(_currentFile, FileMode.Create))
                {
                    TextRange range = new TextRange(_textBox.Document.ContentStart, _textBox.Document.ContentEnd);
                    range.Save(stream, DataFormats.Rtf);
                }

                return true;
            }
        }

        public bool SaveDocumentAs()
        {
            SaveFileDialog dlg = new SaveFileDialog();

            if (dlg.ShowDialog() == true)
            {
                _currentFile = dlg.FileName;
                return SaveDocument();
            }

            return false;
        }
    }
}

 

详细程序见 附件1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值