【发布时间】: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 你是完全正确的。我对这个问题投了反对票以表达我的不满。
-
如果你没有看到上下文并不意味着它不存在
-
让我们忘记它。下次我们会相处得更好。