0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[UWP]RichEditBoxの選択された文字の色を変える

Posted at

#問題
 今までWindows.Formsで開発していたアプリでは、RichTextBoxに入力された文字を、1文字単位で選択して、文字色を変えていました。が、この度Winタブへ移植することが決まり、同様のことがUWPでできないか調査しました。
 ちなみにUWPやWPFの経験ゼロです。

#結果
下記コードでできました。

MainPage.xaml
<Page
    x:Class="UWPTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWPTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button x:Name="btnRed" Content="赤" HorizontalAlignment="Left" Height="40" Margin="460,68,0,0" VerticalAlignment="Top" Width="141" Click="btnRed_Click"/>
        <RichEditBox x:Name="richEditBox" HorizontalAlignment="Left" Height="150" Margin="75,68,0,0" VerticalAlignment="Top" Width="340"/>
        <Button x:Name="btnBlue" Content="青" HorizontalAlignment="Left" Height="40" Margin="460,122,0,0" VerticalAlignment="Top" Width="141" Click="btnBlue_Click"/>

    </Grid>
</Page>
MainPage.xaml.cs
using Windows.UI;
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace UWPTest {
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            richEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, "richEditBox");

        }

        private void btnRed_Click(object sender, RoutedEventArgs e) {

            ITextSelection selectedText = richEditBox.Document.Selection;
            if (selectedText != null) {
                ITextCharacterFormat format = selectedText.CharacterFormat;
                format.ForegroundColor = Color.FromArgb(0, 255, 0, 0);
                selectedText.CharacterFormat = format;
            }
        }

        private void btnBlue_Click(object sender, RoutedEventArgs e) {
            ITextSelection selectedText = richEditBox.Document.Selection;
            if (selectedText != null) {
                ITextCharacterFormat format = selectedText.CharacterFormat;
                format.ForegroundColor = Color.FromArgb(0, 0, 0, 255);
                selectedText.CharacterFormat = format;
            }
        }
    }
}

btnRed_ClickメソッドとbtnBlue_Clickメソッドでほとんど同じことをしているのはご愛敬。
選択されたテキスト(テキストそのものから装飾に関するデータ全部)は、

ITextSelection selectedText = richEditBox.Document.Selection;

で取得できて、さらにITextCharacterFormatを取得すると、文字色等の変更ができます。

#参照
https://docs.microsoft.com/ja-jp/windows/uwp/controls-and-patterns/rich-edit-box
珍しくマイクロソフト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?