#問題
今まで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
珍しくマイクロソフト