У меня есть очень простой пример :Приложение формы 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
В форме у меня есть ListBox (с именем "lst1" ), который использует "dict" в качестве источника элементов :
<ListBox x:Name="lst1">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Value}"
TextSearch.Text="{Binding Path=Key, Mode=OneWay}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
. Также у меня есть один несвязанный -ListBox, предварительно заполненный значениями вручную :
<ListBox>
<Label TextSearch.Text="One" Content="1" />
<Label TextSearch.Text="Two" Content="2" />
<Label TextSearch.Text="Three" Content="3" />
</ListBox>
. Поэтому, когда я запускаю приложение выглядит следующим образом:
Если я пытаюсь перемещаться по элементам с помощью клавиатуры, набирая "один", "два" или "три", я преуспеваю только в несвязанном -списке. Связанный список не работает.
Некоторые замечания :1. )Если я нажимаю "[" в связанном списке, фокус переключается с элемента на элемент циклически :он переходит с 1 на 2, с 2 на 3, с 3 на 1, снова с 1 на 2 и т. д. 2. )Я проверил приложение с помощью Snoop. Одно различие, которое я обнаружил между связанными и несвязанными -списками. Оба списка имеют свойство TextSearch.Text, установленное в элементах управления Label (внутри ItemsPresenter ). Но для не связанного -случая :"источник значения" свойства TextSearch.Text - "Локальный".Для связанного случая :"источником значения" является "ParentTemplate".
П.С. (и Н.Б.) Я знаю, что могу использовать TextSearch.TextPath в списке, но это не то, что мне нужно :)Кроме того, установка свойства TextSearch.Text для ListViewItem (с помощью стиля )не помогает.