tca*_*les 10 wpf treeview double-click treeviewitem
我在树视图中有一个树视图项,它将有一个绑定到它的列表:
<TreeViewItem Name="tviOffline" Foreground="Red" FontWeight="Bold"
Header="Offline">
<TreeViewItem.ItemTemplate>
<DataTemplate DataType="{x:Type local:Buddy}">
<StackPanel>
<TextBlock Text="{Binding Nick}" FontSize="10" Foreground="#8CFFD528" />
</StackPanel>
</DataTemplate>
</TreeViewItem.ItemTemplate>
</TreeViewItem>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何让每个孩子都有双击事件.
任何帮助表示赞赏.非常感谢.
Aur*_*bon 24
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
...
Run Code Online (Sandbox Code Playgroud)
Rob*_*ies 15
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
...
Run Code Online (Sandbox Code Playgroud)
然后,处理程序必须按如下方式编写,以防止双击在连续的父TreeViewItems上触发:
private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args)
{
if (sender is TreeViewItem)
{
if (!((TreeViewItem)sender).IsSelected)
{
return;
}
}
.... do stuff.
}
Run Code Online (Sandbox Code Playgroud)
感谢Aurelien Ribon获得90%的奖励.双击问题似乎在Stack Exchange上的其他帖子中众所周知.只需将两个解决方案整合到一个答案中.
这是我设法让它适用于所有情况的唯一方法:
void MyTreeView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var clickedItem = TryGetClickedItem(myTreeView, e);
if (clickedItem == null)
return;
e.Handled = true; // to cancel expanded/collapsed toggle
DoStuff(clickedItem);
}
TreeViewItem TryGetClickedItem(TreeView treeView, MouseButtonEventArgs e)
{
var hit = e.OriginalSource as DependencyObject;
while (hit != null && !(hit is TreeViewItem))
hit = VisualTreeHelper.GetParent(hit);
return hit as TreeViewItem;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19467 次 |
| 最近记录: |