WPF に、リスト ボックスのデータ テンプレートの一部であるテキスト ボックスがあります。そのテキスト ボックスでは、削除、バックスペース、スペース バーは使用できますが、新しい単語、文字、数字を入力することはできません。ただし、メモ帳から貼り付けることはできます。
ここで何が欠けているのでしょうか?
<ListBox Grid.Column="1"
ItemsSource="{Binding Details}"
VirtualizingStackPanel.VirtualizationMode="Recycling"
HorizontalContentAlignment="Stretch" >
<ListBox.Resources>
<DataTemplate DataType="{x:Type Entities:RADetailEntry}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="0" />
<TextBox Grid.Column="1" IsReadOnly="False" IsEnabled="True"
Text="{Binding Path=Description, Mode=TwoWay}" TextWrapping="Wrap"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextAlignment="Left" />
</Grid>
</DataTemplate>
</ListBox.Resources>
</ListBox>
ベストアンサー1
私はこれによく似た問題に遭遇しました。少し調べたところ、MSDN に同様の問題がリストされているのを見つけました。
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c68d5f3c-c8cc-427d-82e3-6135d075a304/
投稿への回答によると、この問題は、WPF と WinForms がテキスト入力を処理する方法が大きく異なることに関係しています。幸いなことに、上記の投稿では次の解決策が示されています。
ウィンドウを起動するときは、ElementHost.EnableModelessKeyboardInterop(window1) を使用します。これは静的メソッドであるため、ElementHost クラスをインスタンス化する必要はありません。
例えば、
Window window1 = new Window();
ElementHost.EnableModelessKeyboardInterop(window1);
window1.Show();
これで問題は解決しました。お役に立てれば幸いです。