2012-09-28 13 views
5

पर क्लिक स्थिति प्राप्त करें जो मैं करना चाहता हूं वह एक उपयोगकर्ता नियंत्रण है जिसमें ग्रिड के साथ एक अनुभाग होता है, जहां ग्रिड पर क्लिक करते समय कुछ होता है। मुझे पिक्सेल की स्थिति चाहिए जहां क्लिक हुआ और मैं यह सब एमवीवीएम शैली कर रहा हूं। मुझे पता है कि मैं अपने ViewModel पर कार्रवाई का संकेत दे सकता:कमांड बाध्यकारी

<Grid> 
<Grid.InputBindings> 
    <MouseBinding Gesture="LeftClick" Command="{Binding MinimapClick}"/> 
</Grid.InputBindings> 
</Grid> 

मेरे समस्या अब है कि मैं कितना निर्देशांक ... किसी भी विचार को पुनः प्राप्त करने नहीं पता है कि? मैं आपकी मदद की सराहना करता हूं!

+0

मामले में आप कैसे जवाब स्वीकार करने के लिए मैं की ओर [इस पोस्ट] क्या आप निर्देशित करने के लिए चाहते हैं नहीं पता था (http://meta.stackexchange.com:

संदर्भ के लिए, मेरी XAML इस तरह दिखता है/प्रश्न/5234 /)। –

उत्तर

5

इस बारे में कैसे?

private void MinimapClick(object parameter) 
{ 
    Point mousePos = Mouse.GetPosition(myWindow); 
} 

आप विंडो के लिए एक संदर्भ नहीं है, तो आप एक पैरामीटर के रूप में यह भेज सकता है (या जो भी संदर्भ बिंदु आप चाहते हैं का उपयोग करें)।

+0

अच्छा विचार! यह मुझे सही तरीके से मिला ... मैं अपने जवाब में थोड़ा और अधिक जवाब दूंगा। सहायता के लिए धन्यवाद! –

12

KDiTraglia मेरे लिए सही सूचक था ... किसी भी मामले में मुझे कार्यों को परिभाषित करने और मेरे व्यूमोडेल को बाध्य करने के साथ कुछ समस्याएं थीं। अगर किसी और को कुछ समस्याएं हैं तो मैं अपना समाधान पोस्ट करूंगा। यहाँ मैं XAML में क्या किया है है:

<Grid Width="100" Height="100" Grid.Column="2" Grid.Row="2" x:Name="TargetGrid"> 
    <Grid> 
     <Grid.InputBindings> 
      <MouseBinding Gesture="LeftClick" Command="{Binding Path=TargetClick}" CommandParameter="{Binding ElementName=TargetGrid}" /> 
     </Grid.InputBindings> 
    </Grid> 
</Grid> 

मैं UserControl बना सकते हैं और ViewModel करने के लिए यह बाँध। ViewModel में मैं लागू करने और निम्न आदेश बनाने के लिए:

public class PositioningCommand : ICommand 
{ 
    public PositioningCommand() 
    { 
    } 

    public void Execute(object parameter) 
    { 
     Point mousePos = Mouse.GetPosition((IInputElement)parameter); 
     Console.WriteLine("Position: " + mousePos.ToString()); 
    } 

    public bool CanExecute(object parameter) { return true; } 

    public event EventHandler CanExecuteChanged; 
} 

public PositioningCommand TargetClick 
{ 
    get; 
    internal set; 
} 
+0

इस बीटा वल्गारिस के लिए एक गुच्छा धन्यवाद! – Aralox

+0

धन्यवाद आदमी। यू ने अपना समय बचाया! – shanmugharaj

+0

धन्यवाद श्रीमान। यह एक उत्कृष्ट जवाब था। – sagneta

0

मैं कोई संबंधित समस्या थी - मैं अपने ContextMenu के लिए क्लिक करें घटनाओं के लिए माउस स्थिति पर कब्जा करना चाहता था। समस्या: मेरे मेनू का पैरेंट (एक छवि नियंत्रण) कमांड पैरामीटर एलिमेंटनाम द्वारा पहचाना नहीं गया था।

संदर्भ के लिए, बाध्यकारी त्रुटि मुझे प्राप्त हुआ, पहले नाम स्थान के लिए मेरे मेनू जोड़ने के लिए, था:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=imgArena'. BindingExpression:(no path); DataItem=null; target element is 'MenuItem' (Name='mnuAddItem'); target property is 'CommandParameter' (type 'Object') 

जाहिर WPF संदर्भ मेनू अपने नियंत्रण से एक अलग दृश्य पेड़ के हैं, काफी बाध्यकारी बनाने निराशा होती।

कुछ शोध के बाद, मैं इस सरल ठीक है, जो मैं पीछे मेरी कोड के लिए निर्माता में रखा पाया:

NameScope.SetNameScope(mnuGrid, NameScope.GetNameScope(this)); 

कहाँ "mnuGrid" मेरे संदर्भ मेनू का नाम है।

ऐसा करने के बाद, मैं अपने नियंत्रण के पैरामीटर के रूप में अपना नियंत्रण पास करने में सक्षम था जैसे बीटा वल्गारिस ने ऊपर किया था।

<Image Name="imgArena" > 
     <Image.ContextMenu> 
      <ContextMenu Name="mnuGrid"> 
       <MenuItem Header="Place _Entry" Name="mnuAddItem" 
        Command="{Binding AddEntryCmd}" 
        CommandParameter="{Binding ElementName=imgArena}" /> 
      </ContextMenu> 
     <Image.ContextMenu> 
    </Image> 
+0

संपादित करें: मैंने सोचा कि काम करेगा, लेकिन दुर्भाग्यवश, एक्स और वाई निर्देशांक * अंतिम * क्लिक ईवेंट के सापेक्ष हैं, जो मेरे संदर्भ मेनू पर होता है, छवि पर नहीं, जहां मैंने संदर्भ मेनू लॉन्च करने के लिए राइट-क्लिक किया था । – ActualRandy

+0

मुझे पता है कि यह देर हो चुकी है लेकिन ...आप उस छवि के दायाँ क्लिक पर एक कमांड का आह्वान कर सकते हैं जो माउस निर्देशांक भेजता है और उन्हें एक चर में सहेजता है, और फिर यदि आपके AddEntryCmd को निकाल दिया जाता है तो उन सहेजे गए निर्देशांक का उपयोग करें। –

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