私は次の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 でいくつかのトリックも試しましたが、正直なところ、そこで何をしているのか正確にはわかりません。