1
<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;
}
如何當我右擊,它只選擇最頂級的節點?而不是我點擊的那個?類似於ItemsSource
,其中Item
本身不是TreeViewItem
,但DataTemplate
TextBlock
,如何以可視方式在TreeView中選擇對象?TreeViewItem與ItemsSource右鍵單擊不選擇項目
編輯,請參閱下面的答案根據@Viv答案。 我最後不得不使用e.OriginalSource
檢索TextBlock
那麼TreeViewItem
該Item
是英寸
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;
}
我試過這樣做,它仍然給了我相同的結果。 'e.Source'與'sender'相同。 –
@Bob。錯誤不適合我我只能在使用'sender'的處理程序中重現您的問題。 'e.Source'很好。我已經爲答案添加了一個示例。試試看看它是否適用於您,或者即使在該項目中也看到同樣的問題 – Viv
好的,我找出問題出在哪裏,它在'TreeViewItem.Header'中,如果它沒有設置爲'Header ='Text Here'',它不響應點擊(見上面的'TreeViewItem.Header'編輯),但裏面的'Items'做了,'e.Source'是root之後的第一個節點。 –