我有以下 ListView (简化):
<ListView Name="lvwNotes" KeyUp="lvwNotes_KeyUp">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<DockPanel Background="LightGray">
<TextBlock DockPanel.Dock="Right" Text="{Binding Path=Author}" />
<TextBlock Text="{Binding Path=Timestamp}" />
</DockPanel>
<TextBox Text="{Binding Path=Text}"
GotFocus = "lvwNotes_TextBox_GotFocus"
TextWrapping="Wrap" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
通过单击更改选定项目仅在用户单击带有 TextBlocks 的 DockPanel 时有效,但在单击 TextBox 时无效。我想要实现的是将所选项目设置为包含用户单击的 TextBox 的项目。
我设法打通了与 TextBox 相关的 ListViewItem:
private void lvwNotes_TextBox_GotFocus(object sender, RoutedEventArgs e) {
DependencyObject o = Tools.GetAncestorByType((DependencyObject)sender, typeof(ListViewItem));
if (!o.Equals(null)) {
// code to select this ListViewItem
}
}
但是设置
lvwNotes.SelectedIten = o ;
仍然无效。我也尝试过使用 Dispatcher.BeginInvoke 的一些技巧,但老实说,我并不完全知道自己在做什么。