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;
}
어떻게하면 가장 오른쪽 노드 만 선택합니까? 클릭 한 사람이 아닌가요? Item
자체가 TreeViewItem
이 아닌 ItemsSource
과 비슷하지만 TextBlock
인 DataTemplate
과 비슷하지만 시각적으로 TreeView에서 개체를 선택하려면 어떻게해야합니까?ItemsSource Right-Click이있는 TreeViewItem이 항목을 선택하지 않습니다.
편집은 @Viv 응답을 기반으로 한 답변입니다. 는 내가 TextBlock
을 다음 Item
가에 있던 TreeViewItem
. 검색 e.OriginalSource
를 사용하지 결국
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. 나를 위해 잘못하지 않으면 처리기에서 '보낸 사람'을 사용하는 경우에만 문제를 재현 할 수 있습니다. 'e.Source'는 괜찮습니다. 대답에 샘플을 추가했습니다. 그것을 시도하고 그게 잘 작동하는지 또는 해당 프로젝트에서도 동일한 문제가 표시되는지 확인하십시오. – Viv
그래, 정확히 문제가있는 곳을 알아 냈어. 'TreeViewItem.Header'에 있습니다. 'Header = "Text Here"는 클릭에 응답하지 않고 ('TreeViewItem.Header'에 대한 위의 편집 참조),'eSource'가 루트 뒤에있는 첫 번째 노드 인 do 안에있는'Items' . –