2011-06-22 10 views
8

जब माउस बाएं बटन दबाया जाता है और WPF में दबाया जाता है तो मैं दोबारा कार्रवाई कैसे करूं?डब्ल्यूपीएफ: माउस बाएं बटन क्लिक करें और हैंडलिंग

UIElement.PreviewMouseLeftButtonDown घटना के लिए निम्नलिखित ईवेंट हैंडलर काम नहीं किया है हो:

private void BaseButtonRight_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
     { 
      // keep performing action while mouse left button is pressed. 
      // Checking e.ButtonState works only for one click 

     } 

निष्पादन करते हुए भी लूप में नहीं मिलता है और जब बाईं माउस बटन जारी की है हैंडलर कहा जाता है!

उत्तर

17

क्यों एक RepeatButton का उपयोग नहीं?

http://msdn.microsoft.com/en-us/library/ms746649(v=vs.85).aspx

+1

यह स्वीकार्य उत्तर होना चाहिए। – GONeale

+0

@Goneale, जब तक ओपी एक बटन का उपयोग नहीं कर रहा है ... मुझे एक ही समस्या है और मैं एक बटन पर क्लिक नहीं कर रहा हूं इसलिए यह उत्तर मेरी मदद नहीं करता है। मैं पृष्ठभूमि थ्रेड उत्तर का उपयोग करूँगा। लेकिन हां, ओपी को एक उत्तर चुनना चाहिए या अपना जवाब पोस्ट करना चाहिए और उसे चुनें। – CramerTV

+0

लड़का, संदर्भ भूल जाओ जिसके तहत सवाल पूछा गया था लेकिन यह जवाब स्वीकार करेगा। –

0

माउसLeftButtonUp को निकाल दिया जाता है जब तक एक धागा चलाएं।

+0

मुझे यूआई के साथ हेरफेर करने की आवश्यकता है। नीचे टिप्पणियां देखें। –

1

एक बैकवाउंडवर्कर शुरू करें जो माउस जारी होने पर निकलता है। माउस अप ईवेंट के साथ ध्वज सेट करें और पृष्ठभूमिवर्कर DoWork फ़ंक्शन में समय-समय पर जांचें। सुनिश्चित करें कि आप ध्वज तक पहुंचने के लिए लॉक {} का उपयोग करें।

संपादित करें: आप यूआई धागे पर कुछ उपयोग करना चाहते मामले में,, Dispatcher.BeginInvoke का उपयोग उदाहरण के लिए:

Dispatcher.BeginInvoke(new ThreadStart(delegate 
{ 
    ComboBoxItem selItem = ComboboxConnectString.SelectedItem as ComboBoxItem; 
    if (selItem != null && selItem.Tag is string) 
     ComboboxConnectString.Text = (string)selItem.Tag; 
})); 
+0

कार्य करने की आवश्यकता है जिसमें यूआई तत्व के रेंडरट्रांसफॉर्म के साथ छेड़छाड़ करना शामिल है। BackgroundWorker का उपयोग करना चुनौतीपूर्ण दिख रहा है .. BackgroundWorker.DoWork मूल रूप से सो जाएगा लेकिन अगर मैं यूआई थ्रेड पर मार्शल कर रहा हूं, तो मैं पृष्ठभूमि वर्कर को फिर से कैसे कॉल करूं? –

+0

जब आप RenderTransform को संशोधित करने के लिए UI थ्रेड में वापस कॉल करना चाहते हैं, तो Dispatcher.BeginInvoke (मैंने नमूना शामिल करने के लिए अपनी पोस्ट संपादित की है) के साथ ऐसा करें। जब आप लूप जारी रखते हैं तो संशोधन यूआई थ्रेड में निष्पादित होगा। प्रगति पट्टी को अपडेट करते समय यह वही तरीका पृष्ठभूमि पृष्ठभूमि करने के लिए उपयोग करता है। –

संबंधित मुद्दे