2012-11-01 19 views
5

के रूप में दायाँ क्लिक को संभालने में सक्षम नहीं है मेरे पास एक उपयोगकर्ता नियंत्रण में एक पूर्वावलोकन मैउसडाउन ईवेंट के साथ एक डेटाग्रिड स्थापित है। विचार यह है कि जब कोई उपयोगकर्ता अपने माउस को सेल में ले जाता है, तो यह सेल की सामग्री के आधार पर चलाने के लिए एक क्रिया सेट करता है, और जब माउस क्लिक करता है तो कार्रवाई चलती है, चाहे माउस बटन के बावजूद।
मेरे ईवेंट हैंडलर (सी #):WPF डेटाग्रिड पूर्वावलोकनमाउसडाउन

private void LadderMouseClick(object sender, System.Windows.Input.MouseButtonEventArgs e) { 
     if (m_ActiveAction != null) { 
      m_ActiveAction(); 
     } 
     e.Handled = true; 
    } 

मेरे डेटा ग्रिड (XAML):

<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource sourceCollection}}" Name="DataGrid" RowDetailsVisibilityMode="Collapsed" IsReadOnly="True" Height="600" MouseLeave="DataGrid_MouseLeave" MouseEnter="DataGrid_MouseEnter" PreviewMouseDown="LadderMouseClick" PreviewMouseDoubleClick="LadderMouseDoubleClick" VerticalScrollBarVisibility="Hidden" SelectionUnit="Cell" SelectionMode="Single"> 

यह काम करता है, और ठीक से डेटा ग्रिड से अधिक है जब एक उपयोगकर्ता या तो दाएं या बाएं क्लिक के कार्रवाई चलाता है। हालांकि, समस्या यह है कि जब उपयोगकर्ता सही क्लिक करता है, तो सेल का माउस बन जाता है (सेल के चारों ओर एक काला सीमा दिखाई देती है); ऐसा तब नहीं होता जब वे क्लिक छोड़ दें।

वे अलग-अलग व्यवहार क्यों कर रहे हैं? क्या उन्हें उसी तरह से संभाला नहीं जाना चाहिए? क्या मुझे कुछ सचमुच सरल है?

अग्रिम धन्यवाद!

संपादित करें:
मैं अब तक DataGrid.UnselectAll की कोशिश की है(), DataGrid.UnselectAllCells(), DataGrid.SelectedIndex = -1, और DataGrid.CurrentCell = डिफ़ॉल्ट (DataGridCellInfo)। उनमें से कोई भी मेरे लिए काम नहीं किया है।

EDIT # 2:
यदि यह मदद करता है, तो मैं डेटा डेटा प्रदर्शित करने के लिए टेक्स्टब्लॉक के साथ DataGridTemplateColumns का उपयोग कर रहा हूं। क्या यह इस व्यवहार का कारण बन सकता है?

समाधान:
यह Peter Hansen के सुझाव डेटा ग्रिड के साथ ही PreviewMouseDown घटना के लिए एक PreviewMouseRightButtonDown घटना जोड़ने के लिए था जिसके द्वारा हल किया गया था।

उत्तर

4

मुझे लगता है कि आप जो देख रहे हैं वह सेल की सीमा है, जिसे फोकस होने पर प्रदर्शित किया जा रहा है।

आप इस तरह 0 को इसकी मोटाई निर्धारित करके इसे हटा सकते हैं:

<DataGrid.CellStyle> 
    <Style TargetType="DataGridCell"> 
     <Setter Property="BorderThickness" Value="0" /> 
    </Style> 
</DataGrid.CellStyle> 

अद्यतन:
जाहिर है जब आप सेट PreviewMouseDown घटना नियंत्रित किया जा करने के लिए, डेटा ग्रिड केवल कोशिकाओं के चयन बंद हो जाता है जब आप बाएं माउसबटन का प्रयोग करें।

आपको PreviewMouseRightButtonUp को संभालने के साथ-साथ कोशिकाओं का चयन करने से दाएं क्लिक को रोकना होगा।

मुझे लगता है कि आपकी समस्या का समाधान होगा?

+0

उत्तर देने के लिए धन्यवाद, दुर्भाग्य से यह इसे ठीक नहीं लग रहा था। यह आपको यह जानने में रूचि दे सकता है कि, मेरे डेटाग्रिड को एकल चयन मोड पर सेट करने के बावजूद, यदि कोई आइटम जोड़ा या निकाला जाता है तो क्लिक करने पर एकाधिक सेल्स को हाइलाइट किया जा सकता है। अन्य चयनित कोशिकाओं में काले रंग की बजाय नीली सीमा दिखाई देती है। –

+0

मैंने अपना उत्तर अपडेट किया है - उम्मीद है कि यह आपको अब मदद करता है .. –

+0

ओह वाह जो दिलचस्प है, पूर्वावलोकनमौस राइटबटनअप को इसे ठीक कर दिया गया है। मैंने शपथ ली थी कि मैंने पहले यह कोशिश की थी, लेकिन मैंने वास्तव में पूर्वावलोकनमाउस राइटबटनडाउन की कोशिश की जो पहले काम नहीं कर सका। आपकी सहायताके लिए धन्यवाद! –

1

आपको डेटाग्रिड्स के साथ आने वाली अनइलेक्स्ट ऑलसेल विधि को कॉल करने में सक्षम होना चाहिए। यह बस इस तरह दिखता है:

dataGrid.UnselectAllCells(); 

आपके क्लिक क्रिया करने और यह सेल चयन निकाल देना चाहिए के बाद यह कॉल।

संपादित करें: मुझे लगता है कि आपका डेटा Grid.UnselectAllCells() आविष्कार नहीं कर रहा है क्योंकि आप अभी भी पूर्वावलोकनमाउसडाउन ईवेंट में हैं। संबंधित पूर्वावलोकन RightMouseButtonUp ईवेंट बनाने का प्रयास करें और वहां अपनी कोशिकाओं को अचयनित करें। उस घटना में जिस समय आप इस विधि का आह्वान करते हैं, उसकी सफलता के लिए महत्वपूर्ण हो सकता है।

+0

मैंने इसका जवाब देने के लिए अपना प्रश्न संपादित किया, लेकिन यह काम नहीं किया। सेल में अभी भी उस सीमा के चारों ओर सीमा है। –

+0

मैं अपना उत्तर अपडेट करूंगा। –

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