【发布时间】:2012-04-26 06:48:05
【问题描述】:
我有一个非常简单的例子:带有单个表单的 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 检查了应用程序。我发现绑定列表框和非绑定列表框之间的一个区别。两个列表框都在标签控件(在 ItemsPresenter 内)上设置了 TextSearch.Text 属性。但对于非绑定情况:TextSearch.Text 属性的“值源”是“本地”。对于绑定案例:“值源”是“ParentTemplate”。
附注(和 N.B.) 我知道我可以在列表框上使用 TextSearch.TextPath,但这不是我需要的 :) 此外,为 ListViewItem 设置 TextSearch.Text 属性(通过使用样式)也无济于事。
【问题讨论】:
标签: .net wpf binding datatemplate text-search