我认识到这是一个老问题,我还要补充我的回答。
实际上,@yos Commonl, 您的指定官员知道用户试图从MouseEventArgs中挑选哪项物品。 你们需要看一下,例如,原件Source(可能是文本Block),这是用户点击的。 因此,它有数据内容。
因此,将“树木”定在“原始数据”上。
In VB, you can be explicit or implicit:
myTreeView.SelectedItem = CType(e.OriginalSource, TextBlock).DataContext()
myTreeView.SelectedItem = e.OriginalSource.DataContext()
In C#, you will need to determine the type of e.OriginalSource. Do this by putting in a break point, and see what Studio tells you that it is. In this example:
myTreeView.SelectedItem = ((TextBlock)e.OriginalSource).DataContext()
这是我自己的法典的一个例子。 在我的案件中,它用的是数据Grid,而不是一 Tree树,但应当做同样的工作。 如果在选定项目上出现无动于衷的变化,我就利用该守则促使用户。 如果用户对“无储蓄的继续使用”的回答是“什么”的话,则该守则继续采用新的选择。 否则,我就请电文箱阻挡“通道”,阻止“选择”活动发射。
Private Sub dgDataGrid_PreviewMouseLeftButtonDown(sender As Object, e As System.Windows.Input.MouseButtonEventArgs) Handles dgDataGrid.PreviewMouseLeftButtonDown
If dgDataGrid.SelectedItem IsNot Nothing Then
If MyDataContext.ExternalViewModel.ItemIsModified Then
Dim prompt As String = String.Format("Changes have not been saved.{0}{0}Continue without saving?", vbCrLf)
Dim title As String = "Changes Not Saved"
Dim result As MsgBoxResult = MsgBox(prompt, MsgBoxStyle.Exclamation Or MsgBoxStyle.YesNo, title)
If result = MsgBoxResult.Yes Then
dgDataGrid.SelectedItem = e.OriginalSource.DataContext()
End If
End If
End If
End Sub
Private Sub dgDataGrid_SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs) Handles dgDataGrid.SelectionChanged
MyDataContext.SetSearchItem(dgDataGrid.SelectedItem)
End Sub