WPFにおいてIsEditable="True"に設定したComboBoxを使用することがあるかと思います。
そのようなComboBoxで日本語入力を行った際に、ComboBoxのTextプロパティ(およびバインドしているプロパティ)の値が更新されないという状況が発生しました。
いくつかの環境で試したところ、Win8.1・MS-IME,Win7・MS-IME,Win7・Google日本語入力では正常に動作し、Win8.1,Google日本語入力という環境下のみで発生するバグのようです。
TSF関連はバグの温床なのでやはり闇がそこらじゅうに埋もれてそうです。
幸いにも、ComboBoxのTextChangedで無理矢理値を書き換えることで修正が可能です。
TextChangedイベントは次のXAMLかコードビハインドによって設定できます。
参考:http://stackoverflow.com/questions/6914942/how-do-i-get-textchanged-events-from-an-editable-combobox
<ComboBox IsEditable="True" TextBoxBase.TextChanged="ComboBox_TextChanged" />
public MainWindow() { InitializeComponent(); comboBox.AddHandler(System.Windows.Controls.Primitives.TextBoxBase.TextChangedEvent, new System.Windows.Controls.TextChangedEventHandler(ComboBox_TextChanged)); }
ComboBox_TextChangedメソッドは次のように設定します。 TextChangedEventArgs.OriginalSourceプロパティはイベントを発生させた大本のElementを取得できるので、ComboBoxのPart_EditableTextBoxを取得できます。
protected virtual void ComboBox_TextChanged(object sender, TextChangedEventArgs e) { var tb = e.OriginalSource as TextBox; if (tb != null) { ((ComboBox)sender).Text = tb.Text; } }
※2015/11/22追記 Windows10、.NET 4.6環境にしたら普通に変換できました。 やはりWindows8.1が問題だったみたいです。