2014-04-05 98 views
1

我有一個實現拖放的列表框。我綁定了SelectedItem和SelectedIndex屬性。 SelectedItem和SelectedIndex屬性會在發生鼠標向下事件時被設置。如果只有拖放操作,我該如何防止它被設置?我嘗試過預覽左鍵按鈕,但沒有找到任何成功。有任何想法嗎?我需要一些東西,如:列表框中的條件綁定WPF

 TimeSpan difference = DateTime.Now - mousePressedTime; 

     if (difference.TotalSeconds >= 3) 
     { 
      // long press 
      //SelectedIndex and SelectedItem should not be set. 
     } 
     else 
     { 
      // short press 
      //SelectedIndex and SelectedItem should be set. 
     } 
+0

如果我沒有記錯我讀的地方選擇項目不相關的鼠標下來,你必須實現自己的選擇項目的方法。但也許我錯了。 – Bijan

+0

@Bizz SelectedItems只有在鼠標關閉後才能設置。這就是我所觀察到的。你有鏈接到你閱讀的帖子嗎? –

+0

不幸的是沒有。但我嘗試了你的方法,事件和覆蓋,並卡住了。我認爲實施自定義選擇會更容易。因爲您正在使用拖放操作,我認爲使用預覽鼠標並將其弄亂會使事情更加複雜。但是,我只是猜測,也許我錯了。 – Bijan

回答

0

我終於找到了解決方案。但我無法做任何與綁定有關的事情。我所做的是我創建了自己的Listbox,並掛鉤了PreviewMouseLeftButtonDown和PreviewMouseLeftButtonUp事件。我在列表框的SelectedItem和SelectedIndex屬性中執行了什麼邏輯,我不得不在其他地方移動它。該代碼如下,希望它給一個好主意:

public class DragDropListBox : ListBox 
{ 
    private static DateTime mousePressedTime; 

    public DragDropListBox() 
    { 
     this.PreviewMouseLeftButtonDown += PreviewMouseLeftButtonDownHandler; 
     this.PreviewMouseLeftButtonUp += PreviewMouseLeftButtonUpHandler; 
    } 

    private void PreviewMouseLeftButtonDownHandler(object sender, MouseButtonEventArgs e) 
    { 
     mousePressedTime = DateTime.Now; 
    } 

    private void PreviewMouseLeftButtonUpHandler(object sender, MouseButtonEventArgs e) 
    { 
     TimeSpan difference = DateTime.Now - mousePressedTime; 

     if (difference.TotalSeconds <= 1) 
     { 
     // short press 
     if (SelectedItem != null) 
     { 
      // do what ever you have to 
     } 
     } 
     UnselectAll(); 
    } 
}