YomiganaWPFTextBox

公開日: : 最終更新日:2015/10/20 Blog, Microsoft , ,

こんにちは。

WPFでテキストボックスに入力した内容をカナ変換する方法について今日は掲載します。

少し調べると出てきますが、おそらく以下のどちらかの方針になるでしょう。

  • GrapeCityのInputManを使う
  • YomiganaWPFTextBoxを使う

InputManは持ってなかったのでYomiganaWPFTextBoxを今回は使ってみました。
注意点などと合わせて備忘録として残しておきます。

まずは、International Packをダウンロードする必要があります。

YomiganaWPFTextBox.dllへの参照を追加しView作成

 

<Window x:Class="YomiganaTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:yomigana="clr-namespace:Microsoft.International.Windows.Controls;assembly=YomiganaWPFTextBox"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <yomigana:YomiganaWPFTextBox
            Grid.Row="0" x:Name="txtKanji" Margin="10"
            TextCapturedPreferredConversion="ToHalfwidthKatakana"
            YomiganaChanged="txtKanji_YomiganaChanged" />
        <TextBlock
            Grid.Row="1" x:Name="txtKana" Margin="10" />
    </Grid>
</Window>

コードビハインドで読み仮名の取得と設定を行う。
注意点はENTERキーも改行として読み仮名取得される。
私はENTERキーでフォーカス遷移するビヘイビアを併用していたため、
常に末尾に改行コードが設定されていた。
今回のテキストボックスは単一行なので改行コードを削除させることで解決。
半角カナを取得する際に、数字はそのまま全角で取得されてしまうので併せて変換した。

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 YomiganaTest
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void txtKanji_YomiganaChanged(object sender, RoutedEventArgs e)
        {
            this.txtKana.Text = Microsoft.VisualBasic.Strings.StrConv(this.txtKanji.TextCaptured,
                                                                      Microsoft.VisualBasic.VbStrConv.Narrow).Replace("\r", "");
        }
    }
}

MVVMパターンの場合は配島様の以下を記事を参考にされると良いでしょう。
http://www.makcraft.com/blog/meditation/2014/06/08/get-the-yomigana-in-wpf-2/

関連記事

no image

Microsoft Flow 入門

社内LT用

記事を読む

【iPhoneアプリ】開発者登録手順(iOS Developer Program) その1

iPhoneアプリの作成からリリースまでの一通りの流れを体験したかったため、 簡単なiPhon

記事を読む

no image

KeyboardNavigation以外でFocusVisualStyleを表示させる

WPFです。 結論としてはリフレクションで無理やりやれなくはなさそうという感じ。 元ネタはMSDN

記事を読む

【ストアアプリ】トースト通知の基本

Windowsストアアプリ開発での基本。 トースト通知について投稿します。 Pack

記事を読む

no image

シングルボードコンピュータの動作温度について

Raspberry Pi 3 で屋外用のIoT機器を作成できないかと調べていたが、どうやらRaspb

記事を読む

no image

Windows10 IoT CoreでWindowsアップデートの自動実行を停止する

Manage IoT Core device updates このリンクにアップデートコントロール

記事を読む

【iPhoneアプリ】リリース手順〜プロビジョニングプロファイルを作成する〜

リリース前にDistribution Provisioning Profileを作成する 手順

記事を読む

UWPでユニットテスト

ユニバーサルWindowsのアプリケーションプロジェクトおよびクラスライブラリプロジェクトのユニット

記事を読む

no image

Windows 10 IoT Core の 製品化メモ

概念実証(Proof of concept)を終了し、製品化を行いたい場合のステップ サインア

記事を読む

拡張メソッドは、非ジェネリック静的クラスで定義される必要があります

単純にメッセージどおり。 public static class BaseExtensi

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑