簡體   English   中英

WF4重新托管-在觸發ModelChanged之前按下刪除鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM