खोज…


परिचय

WPF व्यवहार डेवलपर को सिस्टम और उपयोगकर्ता घटनाओं के जवाब में WPF नियंत्रण के तरीके को बदलने की अनुमति देता है। सिस्टम के Behavior वर्ग से व्यवहार विरासत में मिलता है। System.Windows.Interactity namespace। यह नेमस्पेस ओवररचिंग एक्सप्रेशन ब्लेंड एसडीके का एक हिस्सा है, लेकिन एक हल्का संस्करण, जो व्यवहार पुस्तकालयों के लिए उपयुक्त है, एक [नगेट पैकेज] [1] के रूप में उपलब्ध है। [१]: https://www.nuget.org/packages/System.Windows.Interactivity.WPF/

माउस व्हील इवेंट को इंटरसेप्ट करने के लिए सरल व्यवहार

व्यवहार को लागू करना

इस व्यवहार के कारण माउस व्हील ईवेंट्स को इनर ScrollViewer से बबल तक पेरेंट ScrollViewer जब इनर इसकी ऊपरी या निचली सीमा पर होता है। इस व्यवहार के बिना, घटनाएं इसे आंतरिक ScrollViewer बाहर कभी नहीं करेंगी।

public class BubbleMouseWheelEvents : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.PreviewMouseWheel += PreviewMouseWheel;
    }

    protected override void OnDetaching()
    {
        this.AssociatedObject.PreviewMouseWheel -= PreviewMouseWheel;
        base.OnDetaching();
    }

    private void PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        var scrollViewer = AssociatedObject.GetChildOf<ScrollViewer>(includeSelf: true);
        var scrollPos = scrollViewer.ContentVerticalOffset;
        if ((scrollPos == scrollViewer.ScrollableHeight && e.Delta < 0) || (scrollPos == 0 && e.Delta > 0))
        {
            UIElement rerouteTo = AssociatedObject;
            if (ReferenceEquals(scrollViewer, AssociatedObject))
            {
                rerouteTo = (UIElement) VisualTreeHelper.GetParent(AssociatedObject);
            }

            e.Handled = true;
            var e2 = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
            e2.RoutedEvent = UIElement.MouseWheelEvent;
            rerouteTo.RaiseEvent(e2);
        }
    }
}

व्यवहार, इस प्रकार के UIElement में, इस प्रकार के नियंत्रण को संलग्न करने में सक्षम होने के लिए, T के नियंत्रण के प्रकार के साथ Behavior<T> आधार-वर्ग को UIElement । जब Behavior XAML से OnAttached जाता है, तो OnAttached विधि कहा जाता है। यह विधि व्यवहार को नियंत्रित करने की घटनाओं से संबद्ध करने की अनुमति देती है ( AssociatedControl माध्यम से)। एक समान विधि, OnDetached को कहा जाता है जब व्यवहार को संबंधित तत्व से OnDetached करने की आवश्यकता होती है। किसी भी घटना संचालकों को हटाने के लिए देखभाल की जानी चाहिए, या स्मृति लीक से बचने के लिए वस्तुओं को साफ करना चाहिए।

करने के लिए यह व्यवहार हुक PreviewMouseWheel घटना है, जो इसे से पहले घटना रोकना एक बदलाव देता ScrollViewer यह देखने के लिए एक मौका है। यह देखने की स्थिति की जांच करता है कि क्या दृश्य पेड़ को किसी ScrollViewer उच्च पदानुक्रम तक घटना को आगे बढ़ाने की आवश्यकता है। यदि ऐसा है, तो यह e.Handled को true e.Handled ताकि ईवेंट की डिफ़ॉल्ट कार्रवाई को रोका जा सके। यह तब उठाती है एक नया MouseWheelEvent AssociatedObject लिए रूट किया गया। अन्यथा, ईवेंट को सामान्य रूप से रूट किया जाता है।


XAML में एक तत्व के लिए व्यवहार संलग्न करना

सबसे पहले, एक्सएएमएल में उपयोग किए जाने से पहले interactivity xml-namespace को दायरे में लाया जाना चाहिए। निम्नलिखित लाइन को अपने XAML के नामस्थानों में जोड़ें।

xmlns: अन्तरक्रियाशीलता = " http://schemas.microsoft.com/expression/2010/interactivity "

व्यवहार को इस तरह संलग्न किया जा सकता है:

<ScrollViewer>
    <!--...Content...-->
    <ScrollViewer>
        <interactivity:Interaction.Behaviors>
            <behaviors:BubbleMouseWheelEvents />
        </interactivity:Interaction.Behaviors>
        <!--...Content...-->
    </ScrollViewer>
    <!--...Content...-->.
</ScrollViewer>

यह एक बनाता है Behaviors भीतरी पर एक संलग्न संपत्ति के रूप में संग्रह ScrollViewer है कि एक शामिल BubbleMouseWheelEvents व्यवहार।

यह विशेष व्यवहार किसी भी मौजूदा नियंत्रण से जुड़ा हो सकता है जिसमें एक एम्बेडेड ScrollViewer , जैसे कि GridView , और यह अभी भी सही ढंग से काम करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow