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/

関連記事

【iPhoneアプリ】多言語対応させる1

iPhoneアプリを多言語対応(iPhone端末の言語設定によってアプリケーションの言語も切り替える

記事を読む

no image

Expression Encoder を組み込んだアプリケーションを配布する際のライセンス問題

Windowsアプリケーションにメディア編集機能を実装したい場合に、Expression Encod

記事を読む

no image

【iPhoneアプリ】背景画像を設定する

ImageResourceにBg.pngという背景画像を登録しておく 背景を設定するタイミング

記事を読む

Visual Studio から Android SDK Managerが起動できない

Android SDKやエミュレーターイメージのアップデートを行いたい場合にAndroid SDK

記事を読む

no image

UWPでMicrosoft.OData.Clientを使用する時、LINQ式でエラー

UWPからは非同期メソッドを実行する必要があるので、通常はExecuteAsyncをコールするが、

記事を読む

Xamarin Studio から Visual Studio for Mac へ変更してから、”The “XamlCTask” task failed unexpectedly.” が発生。

Visual Studio for Mac がGAしたので、インストールしてみた。 それまで開発して

記事を読む

UWPでユニットテスト

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

記事を読む

Xamarin.Forms で NavigationPage を PushModalAsync すると例外が発生するときがある

Forms 2.3.4.231 Mapコントロールがあるページで、NavigationPage

記事を読む

no image

Azure へ WordPress 環境を作成

よくあるやつだけど。 社内LT用

記事を読む

シマンテックインストール時に「指定されたパスが空です。」

Windows10 64bit, Symantec Endpoint Protection はおそら

記事を読む

Message

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

PAGE TOP ↑