[英]WF4 Rehosted - get delete key pressed before ModelChanged is triggered
我試圖跟蹤工作流中選擇了哪些活動,並在刪除活動之前進行一些檢查。
wd.Context.Items.Subscribe<Selection>(SelectionChanged);
List<ModelItem> selectedModelItems = new List<ModelItem>();
private void SelectionChanged(Selection selection)
{
selectedModelItems.Clear();
foreach (ModelItem mi in selection.SelectedObjects)
{
selectedModelItems.Add(mi);
}
}
在按下CTRL鍵並選擇我的所有項目的同時,一切順利,selectedModelItems列表已正確填充。
但是刪除時刻到來了,並且在觸發ModelChanged事件之前,這個SelectionChanged處理函數開始執行並重置了我所有的選擇,因為實際上,現在被刪除了,因此不再選擇它們。 我正在尋找的是一種在選擇更改之前可以訪問該刪除鍵的方法,並且該方法可以在清除該列表之前將其保存到另一個緩沖區。
我的自定義活動的卸載事件發生在ModelChanged之后,因此這不是一個選擇。
更新:
我邁出了新的一步:
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
Console.WriteLine("test");
}
base.OnKeyDown(e);
}
但是此處理程序無法捕獲按下的刪除鍵。 其他一些鍵(例如ctrl或letter)可以正常工作,並且會觸發該事件。 有什么想法嗎?
OK,找到了東西:OnPreviewKeyDown事件。
List<ModelItem> selectedModelItems = new List<ModelItem>();
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
IEnumerable<ModelItem> activities = wd.Context.Items.GetValue<Selection>().SelectedObjects;
foreach (ModelItem mi in activities)
{
selectedModelItems.Add(mi);
}
}
base.OnPreviewKeyDown(e);
}
就這樣,按刪除鍵時,在選擇消失之前,我就能得到選擇的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.