0

私は次のように定義された ComboBox を使用しています:

    <ComboBox Grid.Column="2" Height="29" HorizontalAlignment="Left" Margin="137,192,0,0" Name="componentsComboBox" VerticalAlignment="Top" Width="224" 
              IsEditable="True"
              TextSearch.TextPath="Name">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox> 

..オブジェクトのリストを「名前」プロパティ別に表示します。次の動作を観察しています。

  1. ドロップダウンの項目をクリックすると、componentsComboBox.SelectedValue (および .SelectedItem) がクリックされた項目に対応します。わかった!
  2. アイテムの名前の入力を開始すると、入力中にオートコンプリートが入力され、.SelectedValue (および .SelectedItem) がオートコンプリートされたアイテムに対応します。すごい!
  3. アイテムの名前の入力を開始すると、入力中にオートコンプリートが入力され、実際に入力したものだけに切り詰めるために削除を押します。いいえ!悪いWPF!悪い!
  4. テキストボックス部分の末尾から文字を削除すると 3 と同様の動作

本質的に、次のように定義された 2 つのオブジェクトを含むリストがあるとします。

{ new Component() { Name = "COMPONENT1"}, 
  new Component() { Name = "COMPONENT2"} }

値が欲しい:

  • コンポーネント1
  • コンポーネント2

ドロップダウン部分に表示され、ユーザーが「COMP」と入力した場合、新しい値が入力されたことを認識したいのですが、そのままでは、コントロールは COMPONENT1 を選択したように見えます。

ここで何が欠けていますか?

4

2 に答える 2

0

IsEditable プロパティと IsReadOnly プロパティをそれぞれ True と False に設定することで、WPF でこれを簡単に行うことができます。

参照: http://msdn.microsoft.com/en-us/library/system.windows.controls.combobox.Iseditable.aspx

たとえば、ユーザーが WPF の ComboBox でテキストを編集できるようにするにはどうすればよいですか?

<Window x:Class="LearnWPF.EditableComboBox.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="LearnWPF.EditableComboBox" Height="300" Width="300" 
    > 
  <Window.Resources> 
    <XmlDataProvider x:Key="items" XPath="//item"> 
      <x:XData> 
        <items xmlns=""> 
          <item>01</item> 
          <item>02</item> 
          <item>03</item> 
        </items> 
      </x:XData> 
    </XmlDataProvider> 
  </Window.Resources> 
    <Grid> 
      <ComboBox IsEditable="True" DataContext="{StaticResource items}" 
                ItemsSource="{Binding}"/> 
    </Grid> 
</Window>
于 2012-08-07T05:48:13.963 に答える