我需要在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事件。
uj5u.com熱心網友回復:
您的代碼的背景關系不清楚。你是在擴展 ListView 還是這個代碼隱藏?
通常,您可以ListViewItem.MouseEnter通過向EventSetter樣式添加 a來將事件處理程式附加到事件:
<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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330494.html
