【发布时间】:2017-08-20 02:52:50
【问题描述】:
这个问题主要与上下文菜单有关,但在我的具体情况下,它与 TreeView 控件有关。
TreeView 项目包含一个 StackPanel,在该 StackPanel 上是一个 ContextMenu 属性,我已将其分配给一个 StaticResource(当然是一个 ContextMenu)。说 ContextMenu 导致一个 ICommand ,因此,做它的事。
目前(我相信这是默认行为),右键单击 TreeView 中的项目不会选择该项目。这在 Windows 中很常见,但在这里不会发生。我希望它发生(但我不知道如何)。
一些后续信息:我在 TreeView 中确实有一个选定的项目,这会通过鼠标左键单击而改变。不过,这不是左键单击事件,而是“SelectedItemChanged”事件。这导致我将数据上下文(视图模型)中的“SelectedItem”设置为 SelectedItem 的方法。必须这样做,因为 TreeView 的选定项是“只读”的。
该代码在这里,虽然我不确定它对手头的问题有多大用处:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (this.ScenesTreeView01 == null)
return;
if (this.ScenesTreeView01.DataContext == null)
return;
var DataContext = this.ScenesTreeView01.DataContext as ScenesViewModel;
if (e.NewValue is SceneViewModel)
{
DataContext.SelectedScene = (SceneViewModel)e.NewValue;
}
if (e.NewValue is CharacterViewModel)
{
DataContext.SelectedCharacter = (CharacterViewModel)e.NewValue;
}
}
由于似乎没有一个地方显示“好的,你左键单击,所以这里是选定的项目”,我不知道该怎么做才能告诉它在右键单击时分配选定的项目(以及左键单击)。
我该怎么做?
编辑:我使用的是 MVVM,所以当我们有一个像 SelectedItemChanged 这样带有一个参数为 RoutedPropertyChangedEventArgs e 的方法时,e.Source 将我引回我的视图模型,而不是 TreeViewItem。
【问题讨论】: