gpt4 book ai didi

c# - "MouseLeftButtonDown"TreeViewItem 中未引发事件,为什么?

转载 作者:行者123 更新时间:2023-12-03 04:25:32 25 4
gpt4 key购买 nike

我在 WPF 应用程序中有一个 TreeView 。如下。

<TreeView x:Name="documentOutlinePanel">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="TreeViewItem.MouseLeftButtonDown" Handler="TreeViewItem_MouseLeftButtonDown"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>

这里是事件的处理程序,存在于代码隐藏文件中

private void TreeViewItem_MouseLeftButtonDown(object sender,   MouseButtonEventArgs e)
{
// some code.
}

我还为 TreeView 控件中的项目处理两个 HierarchicalDataTemplate

通过设置 TreeViewItemsSource 属性,对 TreeView 的项目进行限制。

问题
MouseLeftButtonDown 的处理程序根本不执行。
我在这个方法的处理程序的开头设置了一个断点,但断点根本没有命中。

但是,仅供引用。PreviewMouseLeftButtonDown 正在触发,我可以处理它(此事件对我来说并不重要)

任何人都可以向我解释为什么 MouseLeftButtonDown 没有被触发吗?
有什么建议让它火吗?

更新:此问题与 MouseLeftButtonDown is not fired on TreeViewItem 不重复

我看到了这个问题及其答案,但它不适合我。这是差异

  1. 这个问题是针对 SliverLigth 提出的,我的问题是针对 WPF 提出的。
  2. 这个问题是处理TreeView.MouseLeftButtonDown,我的问题是处理TreeViewItem.MouseLeftButtonDown
  3. 我阅读了该问题的答案,但它对我没有任何帮助

最佳答案

谢谢@qqww2,你的回答可能有用,尽管我没有尝试,因为我找到了一个更漂亮的解决方案。
我阅读了 TreeViewItem.OnMouseLeftButtonDown 源代码,我认为如果 TreeViewItem 成功获得焦点,则此事件被标记为在此方法中处理。
所以我做了TreeViewItem 对象为 UnFocusable

<TreeView x:Name="documentOutlinePanel">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Focusable" Value="False"/>
<EventSetter Event="TreeViewItem.MouseLeftButtonDown" Handler="TreeViewItem_MouseLeftButtonDown"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>

这会触发 MouseLeftButtonDown 事件。在该事件的处理程序中,我将 Focus 设置为它,如下所示

private void TreeViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem item = (TreeViewItem)sender;
// do what i want.

item.Focusable = true;
item.Focus();
item.Focusable = false;
e.Handled = true;
}

e.Handled 设置为 true,因为我注意到这个事件发生了两次,一个用于 TreeViewItem,另一个用于其父 TreeViewItem。 (因为这个事件是冒泡事件)所以最后总是选择父 TreeViewItem

这对我有用,以防有人遇到同样的问题

关于c# - "MouseLeftButtonDown"TreeViewItem 中未引发事件,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30356236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com