J C*_*per 18
您可以像这样抑制TreeViewItem的双击事件:
XAML:
<TreeView DockPanel.Dock="Left" TreeViewItem.PreviewMouseDoubleClick="TreeViewItem_PreviewMouseDoubleClick">
<TreeViewItem Header="Node Level 1" IsExpanded="True" >
<TreeViewItem Header="Node Level 2.1" >
<TreeViewItem Header="MyItem" />
</TreeViewItem>
<TreeViewItem Header="Node Level 2.2">
<TreeViewItem Header="MyItem" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
码:
private void TreeViewItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
//this will suppress the event that is causing the nodes to expand/contract
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
根据msdn 文档:
尽管此路由事件似乎遵循通过元素树的隧道路由,但它实际上是每个UIElement沿元素树引发的直接路由事件...想要处理鼠标双击的控件作者应使用PreviewMouseLeftButtonDown事件ClickCount等于2.这将导致Handled的状态在元素树中的另一个元素处理事件的情况下适当地传播.
我不确定这是否是您遇到问题的原因,但我们将以MSDN方式进行操作并使用PreviewMouseLeftButtonDown:
XAML:
<TreeView DockPanel.Dock="Left" TreeViewItem.PreviewMouseLeftButtonDown="TreeView_PreviewMouseLeftButtonDown">
<TreeViewItem Header="Node Level 1" IsExpanded="True">
<TreeViewItem Header="Node Level 2.1" >
<TreeViewItem Header="MyItem" />
</TreeViewItem>
<TreeViewItem Header="Node Level 2.2">
<TreeViewItem Header="MyItem" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
码:
private void TreeView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount > 1)
{
//here you would probably want to include code that is called by your
//mouse down event handler.
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我测试了这个,无论我点击多少次,它都能正常工作
| 归档时间: |
|
| 查看次数: |
8734 次 |
| 最近记录: |