【C#】RichTextBox(WPF)って何よ
今回は、「RichTextBox(WPF)って何よ」という事で、WPFのRichTextBoxについて書いていきたいと思います。
WindowsフォームアプリケーションのRichTextBoxとは違い、FlowDocumentというのを内包するのがWPFのRichTextBoxです。
XAMLで書くと以下ような感じになります。
<Window x:Class="RichTextBoxWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:RichTextBoxWPF" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <RichTextBox> <FlowDocument> <Paragraph> <Bold>Some bold text in the paragraph.</Bold> Some text that is not bold. </Paragraph> <List> <ListItem> <Paragraph>ListItem 1</Paragraph> </ListItem> <ListItem> <Paragraph>ListItem 2</Paragraph> </ListItem> <ListItem> <Paragraph>ListItem 3</Paragraph> </ListItem> </List> <BlockUIContainer> <Image Source="C:\Users\BlackTomato\Desktop\Sample.png" Width="200" /> </BlockUIContainer> </FlowDocument> </RichTextBox> </Grid> </Window>
しかし、XAMLに直書きするというのは汎用性に欠けるため、通常はコードで書くことになると思われます。
<Window x:Class="RichTextBoxWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:RichTextBoxWPF" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <RichTextBox x:Name="richTextBox1"/> </Grid> </Window>
using System; using System.Collections.Generic; using System.Linq; 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; namespace RichTextBoxWPF { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var doc = new FlowDocument(); //Paragraph作成 var p1 = new Paragraph(); p1.Inlines.Add(new Bold(new Run("Some bold text in the paragraph."))); p1.Inlines.Add(new Run(" Some text that is not bold.")); doc.Blocks.Add(p1); //List作成 var l1 = new List(); l1.ListItems.Add(new ListItem(new Paragraph(new Run("ListItem 1")))); l1.ListItems.Add(new ListItem(new Paragraph(new Run("ListItem 2")))); l1.ListItems.Add(new ListItem(new Paragraph(new Run("ListItem 3")))); doc.Blocks.Add(l1); //Imageの作成 var bitmap = new BitmapImage(new Uri(@"C:\Users\BlackTomato\Desktop\Sample.png")); var img = new Image() { Source = bitmap, Width = 200 }; var ui1 = new BlockUIContainer(img); doc.Blocks.Add(ui1); richTextBox1.Document = doc; } } }
次回から、「5ちゃんねるビューアー」のRichTextBox版を作ってみようかと考えています。
しかし、今のところどうやればいいかわからないため時間がかかりそうです。