C# WPF メモ帳 MainWindow.xaml.cs2022年08月25日 11:40

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Reflection;

namespace WpfMemo
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        Boolean _bold = false;
        Boolean _italic = false;
        Boolean _strike = false;
        Boolean _uline = false;

        public Dictionary<int, string> Okisa_Dic { get; set; }
        public Dictionary<int, string> Haba_Dic { get; set; }

        public MainWindow()
        {
            Okisa_Dic = new Dictionary<int, string>()
            {
                {10, "10" },
                {12, "12" },
                {14, "14" },
                {16, "16" },
                {18, "18" },
                {20, "20" },
                {22, "22" },
                {24, "24" },
                {26, "26" },
                {28, "28" },
                {36, "36" },
                {48, "48" },
                {72, "72" },
            };
            Haba_Dic = new Dictionary<int, string>()
            {
                {100, "100" },
                {1000, "1000" },
                {10000, "10000" },
                {100000, "100000" },
            };
            InitializeComponent();
            cbxColor.DataContext = GetColorList();
            DataContext = this;
            richTB.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
            //richTB.Document.PageWidth = 1000;
        }

        /// <summary>
        /// すべての色を取得するメソッド
        /// </summary>
        /// <returns></returns>
        private MyColor[] GetColorList()
        {
            return typeof(Colors).GetProperties(BindingFlags.Public | BindingFlags.Static)
                .Select(i => new MyColor() { Color = (Color)i.GetValue(null), Name = i.Name }).ToArray();
        }
        /// <summary>
        /// 色と色名を保持するクラス
        /// </summary>
        public class MyColor
        {
            public Color Color { get; set; }
            public string Name { get; set; }
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new SaveFileDialog();
            dialog.Filter = "xamlファイル (*.xaml)|*.xaml|全てのファイル (*.*)|*.*";
            if (dialog.ShowDialog() == true)
            {
                SaveXamlPackage(dialog.FileName); //"C:\\test.xaml"); // パス付の保存ファイル名
            }
        }

        // Save XAML in RichTextBox to a file specified by _fileName
        // _fileNameで指定するファイルを、RichTextBoxでXAMLを保存します。
        void SaveXamlPackage(string _fileName)
        {
            TextRange range;
            FileStream fStream;
            range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
            fStream = new FileStream(_fileName, FileMode.Create);
            range.Save(fStream, DataFormats.XamlPackage);
            fStream.Close();
            windMain.Title = _fileName;
        }

        // Load XAML into RichTextBox from a file specified by _fileName
        void LoadXamlPackage(string _fileName)
        {
            TextRange range;
            FileStream fStream;
            range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
            fStream = new FileStream(_fileName, FileMode.OpenOrCreate);
            range.Load(fStream, DataFormats.XamlPackage);
            fStream.Close();
            windMain.Title = _fileName;
        }

        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new OpenFileDialog();
            dialog.Filter = "xamlファイル (*.xaml)|*.xaml|全てのファイル (*.*)|*.*";
            if (dialog.ShowDialog() == true)
            {
                LoadXamlPackage(dialog.FileName);
            }
        }

        private void btnCopy_Click(object sender, RoutedEventArgs e)
        {
            richTB.Copy();
        }

        private void btnPaste_Click(object sender, RoutedEventArgs e)
        {
            richTB.Paste();
        }

        private void btnCut_Click(object sender, RoutedEventArgs e)
        {
            richTB.Cut();
        }

        /*
            var textRange = richTB.Selection;
            // 文字色
            textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
            // フォント
            textRange.ApplyPropertyValue(TextElement.FontFamilyProperty, new FontFamily("Verdana"));
            // フォントサイズ
            textRange.ApplyPropertyValue(TextElement.FontSizeProperty, 12.0);
            // フォントスタイル
            textRange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
        */

        private void btnBold_Click(object sender, RoutedEventArgs e)
        {
            var textRange = richTB.Selection;
            // フォントウエイト
            _bold = !_bold;
            if (_bold == true)
            {
                textRange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
            }
            else
            {
                textRange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Regular);
            }

        }

        private void btnItalic_Click(object sender, RoutedEventArgs e)
        {
            var textRange = richTB.Selection;
            // フォントスタイル
            _italic = !_italic;
            if (_italic == true)
            {
                textRange.ApplyPropertyValue(TextElement.FontStyleProperty, FontStyles.Italic);
            }
            else
            {
                textRange.ApplyPropertyValue(TextElement.FontStyleProperty, FontStyles.Normal);
            }
        }

        private void btnStrike_Click(object sender, RoutedEventArgs e)
        {
            var textRange = richTB.Selection;
            // 取り消し線
            _strike = !_strike;
            if (_strike == true)
            {
                textRange.ApplyPropertyValue(TextBlock.TextDecorationsProperty, TextDecorations.Strikethrough);
            }
            else
            {
                textRange.ApplyPropertyValue(TextBlock.TextDecorationsProperty, new TextDecorationCollection());
            }
        }

        private void btnULine_Click(object sender, RoutedEventArgs e)
        {
            var textRange = richTB.Selection;
            // アンダーライン
            _uline = !_uline;
            if (_uline == true)
            {
                textRange.ApplyPropertyValue(TextBlock.TextDecorationsProperty, TextDecorations.Underline);
            }
            else
            {
                textRange.ApplyPropertyValue(TextBlock.TextDecorationsProperty, new TextDecorationCollection());
            }
        }

        private void cbxOkisa_DropDownClosed(object sender, EventArgs e)
        {
            try
            {
                int idmy = (int)cbxOkisa.SelectedValue;
                // フォントサイズ
                var textRange = richTB.Selection;
                textRange.ApplyPropertyValue(TextElement.FontSizeProperty, (double)idmy);
            }
            catch
            {
                MessageBox.Show("フォントサイズを指定してください");
            }
        }

        private void cbxColor_DropDownClosed(object sender, EventArgs e)
        {
            try
            {
                var mycolor = (MyColor)((ComboBox)sender).SelectedItem;
                var color = mycolor.Color;
                var name = mycolor.Name;
                // 文字色
                var textRange = richTB.Selection;
                textRange.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(color));//Brushes.Red);
            }
            catch
            {
                MessageBox.Show("フォントカラーを指定してください");
            }
        }

        private void richTB_SelectionChanged(object sender, RoutedEventArgs e)
        {
            tbxSelect.Text = richTB.Selection.Text;
        }

        private void cbxGyoHaba_DropDownClosed(object sender, EventArgs e)
        {
            try
            {
                int idmy = (int)cbxGyoHaba.SelectedValue;
                // 行の幅
                richTB.Document.PageWidth = idmy;

            }
            catch
            {
                MessageBox.Show("行の幅を指定してください");
            }
        }
    }
}



コメント

トラックバック

このエントリのトラックバックURL: http://tukasa.asablo.jp/blog/2022/08/25/9520613/tb

<< 2022/08
01 02 03 04 05 06
07 08 09 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

このブログについて

ネットで見つけたいろいろ雑記

バックナンバー

RSS