2010-12-16 7 views
24

मैं कई जीयूआई नियंत्रण तत्वों जिनमें से कुछ माउस बातचीत (mouseenter, mouseleave) पर ही कार्रवाई (कोड-पीछे समारोह कॉल) उत्पन्न करने वाले हैं की है।
[संपादित करें] मैं अपने ईवेंट हैंडलर में कुछ गैर स्टाइल से संबंधित कार्यक्षमता कर रहा हूं।
घटना अभी मैं उपयोग कर रहा हूँ प्रत्येक नियंत्रण में जिम्मेदार बताते हैं:एक शैली के माध्यम से एक घटना समारोह कैसे सेट करें?

<Button Name="Button" Content="Button 1" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    PreviewMouseDown="Button1_PreviewMouseDown" PreviewMouseUp="Button1_PreviewMouseUp" /> 
<Button Name="NotInteractingButton" Content="Button 2" 
    /><!-- this button has no MouseOver-effects --> 
<ToggleButton Content="ToggleButton" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" /> 
<!-- needs to use IsMouseDirectlyOver on the slider knob... --> 
<Slider Name="HorizontalSlider" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    ValueChanged="Slider_ValueChanged" /> 
<Slider Name="VerticalSlider" Orientation="Vertical" 
    MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" 
    ValueChanged="Slider_ValueChanged" /> 

इस उदाहरण में कई नियंत्रण के बाद से ही दो कार्यों "GeneralMouseEnter" और "GeneralMouseLeave" बुला रहे हैं, मैं करने में सक्षम होना चाहते हैं उस शैली को परिभाषित करने के समान शैली या कुछ परिभाषित करें।

[संपादित करें - स्पष्टीकरण]
यह बाद में प्लगइन का एक प्रकार बनना माना जाता है।
(किसी भी जीयूआई कार्यक्रम के लिए कोड और XAML फ़ाइलों को शामिल करें और प्रत्येक इंटरैक्टिव नियंत्रण तत्व ... पर एक शैली सेट)

मैं वेब पर क्या मिला से, मैं इस उदाहरण की तरह EventTriggers उपयोग कर सकते हैं:

<Style.Triggers> 
    <EventTrigger RoutedEvent="Click"> 
    <EventTrigger.Actions> 
     <BeginAction TargetName="SomeAction" /> 
    </EventTrigger.Actions> 
    </EventTrigger> 
</Style.Triggers> 

मैं नहीं जानता कि हालांकि अगर और कैसे एक कार्रवाई के भीतर कार्यों कॉल करने के लिए है।

  • क्या प्रत्येक कार्यक्षमता पर कार्रवाई करने के लिए कार्रवाई + ट्रिगर के साथ शैली बनाकर यह कार्यक्षमता प्राप्त करना संभव है? उसको कैसे करे?
  • मैं एक से अधिक शैलियों (एकाधिक इंटरैक्शन ईवेंट के लिए) को एक नियंत्रण में कैसे आवंटित करूं?
  • क्या इस व्यवहार को प्राप्त करने के लिए शायद एक क्लीनर तरीका भी हो सकता है?
  • [संपादित करें]
    यदि मैं कहना चाहता हूं, तो मेरे जीयूआई में सभी स्लाइडर्स पर माउस परस्पर संपर्क करें?

उत्तर

68

मार्टिन,

आप एक EventSetter का उपयोग कर एक शैली से सीधे एक ईवेंट हैंडलर असाइन कर सकते हैं:

<Style TargetType="{x:Type Button}"> 
    <EventSetter Event="Click" Handler="SomeAction"/> 
</Style> 

@ColinE:

मैं नहीं कर रहा हूँ सुनिश्चित करें कि ईवेंट वायर-अप करने के लिए शैली का उपयोग करना एक अच्छा विचार है।परिभाषा के अनुसार स्टाइल, नियंत्रण की दृश्य उपस्थिति को परिभाषित करते हैं।

दुर्भाग्य से, इस WPF शैलियों के बारे में एक आम और व्यापक ग़लतफ़हमी हो रहा है: हालांकि उनके नाम से पता चलता है कि वे कर रहे हैं, जैसे आप क्या कहते हैं, केवल दृश्य उपस्थिति को परिभाषित करने के लिए होती हैं, वे वास्तव में और अधिक कर रहे हैं: यह उपयोगी है नियंत्रण के लिए गुणों का एक सेट असाइन करने के लिए शॉर्टकट के रूप में आमतौर पर शैलियों को देखने के लिए।

+0

ग्रेट, यह वही है जो मैं खोज रहा था - खासकर 'आधारितऑन = "..." 'के साथ संयोजन में। –

1

मुझे यकीन नहीं है कि ईवेंट वायर-अप करने के लिए शैली का उपयोग करना एक अच्छा विचार है। परिभाषा के अनुसार स्टाइल, नियंत्रण की दृश्य उपस्थिति को परिभाषित करते हैं। मुझे लगता है कि आप अपने ईवेंट हैंडलर में कुछ गैर स्टाइल से संबंधित कार्यक्षमता कर रहे हैं?

यदि हां, तो मैं सिर्फ ऊपर कोड में इन नियंत्रण के पीछे तार होगा।

आप एक से अधिक नियंत्रण है कि कुछ मानदंडों को पूरा करने में सहायता के दृश्य ट्री के लिए Linq जैसे टूल का उपयोग कर सकते हैं:

http://www.scottlogic.co.uk/blog/colin/2010/03/linq-to-visual-tree/

फिर, नियंत्रण से अधिक पुनरावृति तारों ऊपर हर एक।

कॉलिन ई

+0

क्या मैं सही ढंग से समझता हूं कि यह रनटाइम पर किया जा सकता है? तो उदा। 'प्रारंभिक कॉम्पोनेंट्स()' में मैं कुछ रूट तत्व से शुरू करता हूं और कुछ विशिष्ट विशेषता वाले सभी नियंत्रण उचित घटना के लिए वायर्ड हो जाते हैं? –

+2

मुझे नहीं लगता कि नियंत्रण की शैली में शामिल नहीं हो सकता है जब आप उस पर क्लिक करते हैं या अपने माउस को उस पर होवर करते हैं। – Gabe

+0

हाय मार्टिन, हाँ, यह कोड के पीछे से किया जा सकता है। Gabe ... कार्यक्षमता तार करने के लिए शैलियों का उपयोग बस मुझे गलत लगता है! क्या होता है जब आप अपना आवेदन 'थीम' करना चाहते हैं? – ColinE

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