सबसे आसान तरीका स्लाइडर उपवर्ग है एक संलग्न संपत्ति:
public class SliderTools : DependencyObject
{
public static bool GetMoveToPointOnDrag(DependencyObject obj) { return (bool)obj.GetValue(MoveToPointOnDragProperty); }
public static void SetMoveToPointOnDrag(DependencyObject obj, bool value) { obj.SetValue(MoveToPointOnDragProperty, value); }
public static readonly DependencyProperty MoveToPointOnDragProperty = DependencyProperty.RegisterAttached("MoveToPointOnDrag", typeof(bool), typeof(SliderTools), new PropertyMetadata
{
PropertyChangedCallback = (obj, changeEvent) =>
{
var slider = (Slider)obj;
if((bool)changeEvent.NewValue)
slider.MouseMove += (obj2, mouseEvent) =>
{
if(mouseEvent.LeftButton == MouseButtonState.Pressed)
slider.RaiseEvent(new MouseButtonEventArgs(mouseEvent.MouseDevice, mouseEvent.Timestamp, MouseButton.Left)
{
RoutedEvent = UIElement.PreviewMouseLeftButtonDownEvent,
Source = mouseEvent.Source,
});
};
}
});
}
आप इस संलग्न संपत्ति का उपयोग स्लाइडर पर IsMov के साथ करेंगे eToPointEnabled संपत्ति:
<Slider IsMoveToPointEnabled="True" my:SliderTools.MoveToPointOnDrag="True" ... />
इन समाधानों काम के दोनों बराबर PreviewMouseLeftButtonDown घटनाओं में PreviewMouseMove घटनाओं को परिवर्तित करने के लिए जब भी बाएं बटन नीचे है द्वारा।
ध्यान दें कि जब संपत्ति गलत पर सेट की जाती है तो अटैचमेंट प्रॉपर्टी ईवेंट हैंडलर को नहीं हटाती है। मैंने सादगी के लिए इसे इस तरह लिखा है क्योंकि आपको लगभग इस तरह के हैंडलर को हटाने की आवश्यकता नहीं होगी। मैं आपको इस सरल समाधान के साथ चिपकने की सलाह देता हूं, लेकिन यदि आप चाहते हैं कि जब आप न्यूवैल्यू झूठ बोलते हैं तो हैंडलर को हटाने के लिए आप PropertyChangedCallback को संशोधित कर सकते हैं।
mySlider.PreviewMouseMove += (sender, args) =>
{
if (args.LeftButton == MouseButtonState.Pressed)
{
mySlider.RaiseEvent(new MouseButtonEventArgs(args.MouseDevice, args.Timestamp, MouseButton.Left)
{
RoutedEvent = UIElement.PreviewMouseLeftButtonDownEvent,
Source = args.Source
});
}
};
mySlider मेरी स्लाइडर के नाम जा रहा है
:
स्रोत
2010-06-02 18:04:43
धन्यवाद रे! मुझे लगता है कि मैं लगभग यह काम कर रहा है। मुझे स्लाइडरटूल में माउस मूव फ़ंक्शन में टाइप कास्टिंग के साथ कोई समस्या है। यहां मेरी त्रुटि है: 'System.Windows.Input.MouseEventHandler' टाइप करने के लिए 'System.Windows.Input.MouseButtonEventHandler' प्रकार की ऑब्जेक्ट डालने में असमर्थ। इसे ठीक करने के तरीके पर कोई विचार? –
इसके बारे में क्षमा करें। रूटेड इवेंट तकनीक के लिए मुझे MouseEventArgs की बजाय माउसबटन EventArgs में पास करने की आवश्यकता होती है क्योंकि MouseEventArgs वास्तव में इसके ईवेंट प्रकार की जांच करता है। मैंने आवश्यक परिवर्तन किया है और परिणामी कोड का परीक्षण किया है। ऐसा लगता है कि आप वही करना चाहते हैं जो आप चाहते हैं। का आनंद लें! –