MESCIUS InputMan for WPF 3.0J > InputMan for WPF の使い方 > IME 管理コンポーネント > 基本的な使い方 |
このトピックでは、IME 管理コンポーネントの基本的な使い方について解説します。
IME 管理コンポーネントは、テキストコントロールや標準のテキストボックス等のコントロールに、日本語 IME による入力プロセス中に使用可能な読み取り文字列の取得、IME 状態の取得や保持といった機能を提供する拡張コンポーネントです。
IME 管理コンポーネントには ReadingString、ReadingStringKanaMode、ReadingStringOutputMode の 3 つの添付プロパティがあり、これによってターゲット要素上の読み取り文字列を管理します。
WPF のデータバインディング機能と IME 管理コンポーネントを組み合わせることで、コントロールに入力された変換文字列に対する読み取り文字列を、指定したコントロールへ自動的に表示することができます。
入力された読み取り文字列は、ReadingString 添付プロパティにて取得します。Binding オブジェクトの Path プロパティに ReadingString 添付プロパティを設定することで、漢字の入力が行われるたびに指定したコントロールにて読み取り文字列が表示されるようになります。
取得される読み取り文字列のかなモードは、ReadingStringKanaMode 添付プロパティを使用して指定します。ReadingStringKanaMode 添付プロパティには、以下の3つの設定値があります。
プロパティ値 | 説明 |
---|---|
KanaMode.KatakanaHalf | 日本語の文字を半角カタカナに変換します。 |
KanaMode.Katakana | 日本語の文字を全角カタカナに変換します。 |
KanaMode.Hiragana | 日本語の文字をひらがなに変換します。 |
また、ReadingStringOutputMode 添付プロパティを使用して、読み取り文字列の出力形式を指定します。ReadingStringOutputMode 添付プロパティには、以下の3つの設定値があります。
プロパティ値 | 説明 |
---|---|
ReadingStringOutputMode.None | ReadingString 添付プロパティに読み取り文字列を反映させません。 |
ReadingStringOutputMode.Append | ReadingString 添付プロパティの内容の末尾に読み取り文字列を追加します。 |
ReadingStringOutputMode.Replace | ReadingString 添付プロパティの内容を新たな読み取り文字列で上書きします。 |
以下のサンプルコードは、氏名フィールドに入力された氏名に対するふりがなを半角カタカナで表示する XAML コードです。
<StackPanel> <im:GcTextBox WatermarkDisplayNull="ここにふりがなが表示されます" WatermarkDisplayNullForeground="LightSteelBlue"> <im:GcTextBox.Text> <Binding Mode="TwoWay" ElementName="GcTextBox1" Path="(im:GcImeManager.ReadingString)" /> </im:GcTextBox.Text> </im:GcTextBox> <im:GcTextBox Name="GcTextBox1" im:GcImeManager.ReadingStringKanaMode="KatakanaHalf" im:GcImeManager.ReadingStringOutputMode="Append" WatermarkDisplayNull="氏名を入力してください。" WatermarkDisplayNullForeground="LightSteelBlue" /> </StackPanel>
AllowSaveImeStatus 添付プロパティを true に設定することで、指定した要素の IME 状態を保存することができます。このとき、実際には以下の処理が行われます。
以下のサンプルコードは、AllowSaveImeStatus 添付プロパティの動作を確認するための例です。
<StackPanel> <StackPanel Orientation="Horizontal"> <TextBox /> <TextBlock Text="1. IME に関する設定はなにも行っていません。" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBox im:GcImeManager.AllowSaveImeStatus="True" /> <TextBlock Text="2. AllowSaveImeStatus を true に設定しています。" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBox InputMethod.PreferredImeState="On" InputMethod.PreferredImeConversionMode="FullShape,Native" /> <TextBlock Text="3. IME の状態を「ひらがな」に設定しています。" /> </StackPanel> </StackPanel>
上記サンプルを実行したら、以下のそれぞれの操作を行うことで、AllowSaveImeStatus 添付プロパティの設定が IME の状態変化にどのように影響するか確認できます。
GetConversionList メソッドを使用して、指定された読み取り文字列に対する変換候補のリストを取得できます。また、GetReverseConversionList メソッドを使用して、指定された変換結果文字列に対する読み取り文字列のリストを取得できます。取得されるリストの内容は、IME の種類や IME の学習状態などにより異なります。
GetConversionList メソッドおよび GetReverseConversionList メソッドを使用する場合、アプリケーションに対して完全信頼を与える必要があります。 |
以下のサンプルコードは、入力された読み取り文字列に対する変換候補文字列の一覧を ListBox に表示します。
Imports GrapeCity.Windows.InputMan Private Sub GcTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) ListBox1.ItemsSource = GcImeManager.GetConversionList(GcTextBox1.Text) End Sub
using GrapeCity.Windows.InputMan; private void GcTextBox1_TextChanged(object sender, TextChangedEventArgs e) { ListBox1.ItemsSource = GcImeManager.GetConversionList(GcTextBox1.Text); }
<!-- VB、C#とも、以下のコードをページ内に記述してください --> <StackPanel> <im:GcTextBox Name="GcTextBox1" Format="J" TextChanged="GcTextBox1_TextChanged" /> <ListBox x:Name="ListBox1" /> </StackPanel>
ImeConversionMode、ImeSentenceMode、および ImeState の各プロパティを使用して、現在の IME の状態を取得することができます。これらは、InputMethod クラスの同名のプロパティと同じ値を返しますが、InputMethod と異なり、GcImeManager のそれらのプロパティは依存関係プロパティであり、Trigger や Binding をサポートします。これにより、IME 状態をトリガーの条件として使用することができます。
以下のサンプルコードは、GcTextBox コントロールがフォーカスを受け取り、かつ IME が ON の場合に、背景色を変更する XAML コードです。
<StackPanel Margin="10"> <StackPanel.Resources> <Style TargetType="im:GcTextBox"> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Source={x:Static im:GcImeManager.Current}, Path=ImeState}" Value="On"/> <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsKeyboardFocusWithin}" Value="True"/> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="LightGreen"/> </MultiDataTrigger> </Style.Triggers> </Style> </StackPanel.Resources> <TextBlock Text="フォーカスを受け取ったときに IME が OFF になるようにしています。" /> <im:GcTextBox InputMethod.PreferredImeState="Off"/> <TextBlock Text="フォーカスを受け取ったときに IME が ON になるようにしています。" Margin="0, 10, 0, 0" /> <im:GcTextBox InputMethod.PreferredImeState="On"/> </StackPanel>