私は非常に単純な例を持っています:データを持つ辞書を含む単一のフォームを持つWPFフォームアプリケーション:
Dim dict As New Collections.Generic.Dictionary(Of String, String)
Private Sub MainWindow_Loaded() Handles Me.Loaded
dict.Add("One", "1")
dict.Add("Two", "2")
dict.Add("Three", "3")
lst1.ItemsSource = dict
End Sub
フォームには、項目ソースとして「dict」を使用する ListBox (「lst1」という名前) があります。
<ListBox x:Name="lst1">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Value}"
TextSearch.Text="{Binding Path=Key, Mode=OneWay}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
また、手動で値が事前に入力された、バインドされていない ListBox が 1 つあります。
<ListBox>
<Label TextSearch.Text="One" Content="1" />
<Label TextSearch.Text="Two" Content="2" />
<Label TextSearch.Text="Three" Content="3" />
</ListBox>
したがって、アプリを起動すると、次のようになります。
質問:
「one」、「two」、または「three」と入力してキーボードでアイテムをナビゲートしようとすると、バインドされていないリスト ボックスでのみ成功します。バインドされたリスト ボックスが失敗します。
いくつかの注意事項: 1.) バインドされたリスト ボックスで「[」を押すと、フォーカスが項目から項目へ循環的に変化します: 1 から 2 へ、2 から 3 へ、3 から 1 へ、1 から 2 へ再び移動します。など 2.) Snoop でアプリを確認しました。バインドされたリスト ボックスとバインドされていないリスト ボックスの違いを 1 つ見つけました。どちらのリスト ボックスにも、Label コントロール (ItemsPresenter 内) に TextSearch.Text プロパティが設定されています。ただし、バインドされていない場合: TextSearch.Text プロパティの「値のソース」は「ローカル」です。バインドされたケースの場合: 「値のソース」は「ParentTemplate」です。
PS(およびNB) リストボックスでTextSearch.TextPathを使用できることはわかっていますが、これは私が必要とするものではありません:)また、ListViewItemのTextSearch.Textプロパティを(スタイルを使用して)設定しても役に立ちません。