[英]TreeViewItem with ItemsSource Right-Click doesn't select the Item
<DataTemplate DataType="{x:Type EntityType:FixedDevice}">
<TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource NameConverter}}"/>
</DataTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<EventSetter Event="PreviewMouseRightButtonUp" Handler="TreeViewItem_RightClick"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeViewItem Header="Data Warehouse">
<TreeViewItem.Items>
<TreeViewItem Header="Platforms">
<TreeViewItem.Items>
<TreeViewItem>
<TreeViewItem.Header>
<TextBlock Text="{Binding RelativeSource={RelativeSource Self},
Path=Parent.Items.Count,
StringFormat=Public ({0})}">
</TextBlock>
</TreeViewItem.Header>
</TreeViewItem.Header>
</TreeViewItem.Items>
</TreeViewItem>
</TreeViewItem.Items>
</TreeViewItem>
private void TreeViewItem_RightClick(object sender, MouseButtonEventArgs e) {
TreeViewItem item = sender as TreeViewItem;
if(item != null) { item.Focus(); item.IsSelected = true; }
e.Handled = true;
}
How come when I right-click, it only selects the top-most node? 右键单击时,为什么只选择最顶部的节点呢? and not the one I click?
而不是我点击的那个? Similar for an
ItemsSource
, which the Item
itself is not a TreeViewItem
, but a DataTemplate
with a TextBlock
, how do I select the object in the TreeView visually? 对于类似
ItemsSource
,其Item
本身并不是一个TreeViewItem
,但DataTemplate
有一个TextBlock
,我怎么在TreeView直观地选择对象?
Edit, see below for answer based on @Viv answer. 编辑,有关基于@Viv答案的答案,请参见下文。 I ended up having to use
e.OriginalSource
to retrieve the TextBlock
then the TreeViewItem
that the Item
was in. 我最终不得不使用
e.OriginalSource
来检索TextBlock
然后检索该Item
所在的TreeViewItem
。
private void TreeViewItem_RightClick(object sender, MouseButtonEventArgs e) {
TreeViewItem item = (e.OriginalSource as FrameworkElement).Parent as TreeViewItem;
if(item == null) {
item = e.Source as TreeViewItem;
if(item == null) {
return;
}
}
item.IsSelected = true;
e.Handled = true;
}
It's because what your looking for is e.Source
and not sender
这是因为您要查找的是
e.Source
而不是sender
try switching your right-click handler to: 尝试将右键单击处理程序切换为:
private void TreeViewItem_RightClick(object sender, MouseButtonEventArgs e) {
TreeViewItem item = e.Source as TreeViewItem;
if (item == null)
return;
// item.Focus();
item.IsSelected = true;
e.Handled = true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.