WPF .NET Core - 如何找到依赖属性更改事件的来源?
Posted
技术标签:
【中文标题】WPF .NET Core - 如何找到依赖属性更改事件的来源?【英文标题】:WPF .NET Core - how to find source of dependency property changed event? 【发布时间】:2021-12-05 00:30:08 【问题描述】:我需要在ListViewItem
鼠标悬停事件上运行代码。我尝试了几种解决方案,但都不适合我。
我想出了这个:
private void ProcessListItems()
foreach (var item in settings.items)
var i = lst.ItemContainerGenerator.ContainerFromItem(item) as ListViewItem;
if (i == null)
continue;
BindingOperations.SetBinding(this, ItemMouseOverProperty, new Binding
Path = new PropertyPath(ListViewItem.IsMouseOverProperty),
Source = i
);
public bool ItemMouseOver
get return (bool)GetValue(ItemMouseOverProperty);
set SetValue(ItemMouseOverProperty, value);
public static readonly DependencyProperty ItemMouseOverProperty =
DependencyProperty.Register("ItemMouseOver", typeof(bool), typeof(MainWindow), new PropertyMetadata(false, OnItemMouseOverChanged));
static void OnItemMouseOverChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
将所有项目添加到列表视图后,我将每个项目 ItemMouseOverProperty
绑定到我自己的 dep prop ItemMouseOverProperty
。
现在我需要找出是哪个ListViewItem
触发了它..
简而言之:我将一个 dep 属性绑定到另一个。我想知道是哪个source
对象引发了changed
事件。
【问题讨论】:
这是一个糟糕的问题。上下文绝对不清楚。请停止在没有上下文的情况下发布不相关的代码 sn-ps 或 sn-ps。对于不了解您的项目的人来说,它们完全没有意义。这是一个非常糟糕和非常烦人的习惯。我们如何知道您需要解决方案的环境?解决方案通常取决于这些细节。 @BionicCode 那你为什么要回答呢?投票结束并继续。 @Clemens 你是完全正确的。我对这个问题投了反对票以表达我的不满。 如果你没有看到上下文并不意味着它不存在 让我们忘记它。下次我们会相处得更好。 【参考方案1】:您的代码上下文不清楚。你是在扩展 ListView 还是这个代码隐藏?
通常,您可以通过在样式中添加EventSetter
来将事件处理程序附加到ListViewItem.MouseEnter
事件:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="MouseEnter" Handler="ListViewItem_MouseEnter" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
private void ListViewItem_MouseEnter(object sender, MouseEventArgs e)
var mouseOverItem = sender as ListViewItem;
根据您的确切上下文,您还可以定义触发器并在ListBoxItem.IsMouseOver
上触发。
【讨论】:
感谢您的回答。回复:上下文 - 这无关紧要。我将一个 dep 属性绑定到另一个。我想找出哪个 source 对象引发了changed
事件。有什么不清楚的地方?
“您也可以在 ListBoxItem.IsMouseOver 上触发” - 我知道的唯一方法是使用 EventTrigger,它们并非旨在仅运行某些 XAML 操作的代码。我尝试了命令绑定,但失败了。
“有什么不清楚的地方吗?” 我告诉你有什么不清楚的地方。你正在做的事情是不可能的——完全错误的方法。为了给你提供合适的解决方案,人需要更多的上下文。你把你寻求帮助的人的请求说成无关紧要,真是太大胆了。我不是为了抱怨而抱怨。我想提供帮助并意识到为了为您提供最佳解决方案,缺少一些关键信息。感觉就像你非常傲慢地接近我,告诉我我的信息请求无关紧要。这是傲慢还是无知。
“我知道的唯一方法是使用 EventTrigger”。这不是唯一的方法。以上是关于WPF .NET Core - 如何找到依赖属性更改事件的来源?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 .NET Core 3.0 中 WPF 配置依赖注入 ?
在 WPF .net core 5 中运行时更改应用程序文化时如何更新属性绑定