Trong WPF, khi tôi nhấp chuột phải vào một mục treeview tôi muốn nó được chọn/kích hoạt trước khi hiển thị menu ngữ cảnh.Trong WPF, làm cách nào để chọn mục treeview bên dưới con trỏ của tôi khi nhấp chuột phải?
Điều này nghe có vẻ khá đơn giản, nhưng sự bao gồm của một hierachicalDataTemplate làm phức tạp mọi thứ một chút.
Tôi có treeview sau:
<TreeView
x:Name="trv"
ContextMenu="{StaticResource contextMenu}"
ItemTemplate="{StaticResource treeHierarchicalDataTemplate}"
ItemsSource="{Binding Source={StaticResource meetingItems}}" >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="trv_PreviewMouseRightButtonDown"/>
<Setter Property="IsExpanded" Value="True"></Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Và đây là xử lý sự kiện của tôi ...
private void trv_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem item = sender as TreeViewItem;
if (item != null)
{
item.Focus();
e.Handled = true;
}
}
Lưu ý làm thế nào tôi thêm một EventSetter trên. ALMOST này hoạt động. Nhưng nó chỉ chọn nút treeview cấp gốc (nghĩa là nút gốc của nút mà tôi nhấp chuột phải). Điều này có thể do mẫu dữ liệu phân cấp của tôi? Mẫu này có thể chứa con của LOẠI CÙNG.
Đây là của tôi Mẫu dữ liệu phân cấp ...
<HierarchicalDataTemplate x:Key="treeHierarchicalDataTemplate"
ItemsSource="{Binding Path=ChildMeetingItems}">
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Red}" Value="True">
<Setter TargetName="img" Property="Image.Source" Value="pack://siteoforigin:,,,/images/bookRed.png"></Setter>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
<StackPanel
x:Name="treeViewItemPanel"
Background="Transparent"
Orientation="Horizontal">
<Image Width="16" Height="16" x:Name="img" Margin="0,0,4,0" Source="pack://siteoforigin:,,,/images/bookGreen.png"></Image>
<TextBlock Foreground="DarkGray" Text="{Binding DisplayIndex}" Margin="0,0,5,0"></TextBlock>
<TextBlock Text="{Binding Summary}"></TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
Bất kỳ ý tưởng về lý do tại sao chỉ có nút gốc thay vì nút con được lựa chọn khi nhấn chuột phải?
Cảm ơn Denis. Điều đó có ý nghĩa. Tôi vẫn nhận được hành vi kỳ lạ mặc dù ... nếu tôi đặt ItemContainerStyle trên cả hai hierarchicalDataTemplate và treeview, sau đó nó vẫn làm như trước. Nếu tôi chỉ đặt ItemContainerStyle trên hierarchicalDataTemplate, nó cũng làm như vậy, nhưng lần này chỉ dành cho các nút ở cấp độ thứ hai. Lạ thật. Bất kỳ ý tưởng? – willem
Aah, thú vị. Điều đó đã xảy ra do e.Handled = true. Không chắc chắn 100% lý do tại sao ... – willem
Vì bạn đang xử lý sự kiện đường hầm (sự kiện PreviewXXX). Những sự kiện này đi từ trên xuống dưới cùng của cây, vì vậy nếu bạn đặt e.Handled = true tại gốc, nó sẽ dừng ở đó và không đường hầm xuống cây đến mục của bạn. –