LightSwitchでのIME制御
現バージョンのLightSwitchではTextBoxに対してIMEの設定を行うことができません。しかし日本ではIME制御したいケースは普通に考えられます。Silverlight自体はIME制御できるのでヘルパーを作成してカスタムコードで対処することを考えました。
public static class IContentItemProxyExtention { public static void SetTextBoxIme(this IContentItemProxy @this, bool enabled, InputMethodState state, ImeConversionModeValues mode) { @this.ControlAvailable += delegate(object sender, ControlAvailableEventArgs e) { var txt = (TextBox)e.Control; InputMethod.SetIsInputMethodEnabled(txt, enabled); InputMethod.SetPreferredImeState(txt, state); InputMethod.SetPreferredImeConversionMode(txt, mode); }; } public static void SetTextBoxIme(this IContentItemProxy @this, bool enabled) { @this.ControlAvailable += delegate(object sender, ControlAvailableEventArgs e) { var txt = (TextBox)e.Control; InputMethod.SetIsInputMethodEnabled(txt, enabled); }; } }
ヘルパーはCreatedのタイミングでFindControlした結果に対して指定します。
partial void OrdersListDetail_Created() { this.FindControl("ShipName1") .SetTextBoxIme(true, InputMethodState.On, ImeConversionModeValues.Katakana); this.FindControl("ShipAddress1") .SetTextBoxIme(true, InputMethodState.On, ImeConversionModeValues.FullShape | ImeConversionModeValues.Native); this.FindControl("ShipCity1").SetTextBoxIme(false); }