हम ScrollViewer
के भीतर मौजूद तत्वों के साथ उपयोग के लिए एक ट्रिगर लिख सकते हैं।
<Grid>
<ScrollViewer VerticalAlignment="Top" Height="200">
<StackPanel HorizontalAlignment="Left">
<Button Name="button" Content="Open">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:ChangePropertyAction TargetObject="{Binding ElementName=popup}" PropertyName="IsOpen" Value="True"/>
</i:EventTrigger>
<local:ScrollTrigger>
<ei:ChangePropertyAction TargetObject="{Binding ElementName=popup}" PropertyName="IsOpen" Value="False"/>
</local:ScrollTrigger>
</i:Interaction.Triggers>
</Button>
<Popup Name="popup" PlacementTarget="{Binding ElementName=button}">
<TextBlock Background="White" Text="Sample text"/>
</Popup>
<Rectangle Width="100" Height="100" Fill="Red"/>
<Rectangle Width="100" Height="100" Fill="Green"/>
<Rectangle Width="100" Height="100" Fill="Blue"/>
<Rectangle Width="100" Height="100" Fill="Yellow"/>
</StackPanel>
</ScrollViewer>
</Grid>
हम एक बटन एक Popup
और किसी भी माता-पिता ScrollViewer
ScrollTrigger
कार्यों आग और फिर हम पॉपअप बंद कर सकते हैं का कारण बनता है में किसी भी स्क्रॉल खुलती है: यहाँ एक पूरा नमूना अनुप्रयोग है। ध्यान दें कि ट्रिगर Button
से जुड़ा हुआ है और Popup
नहीं है। हम दृश्य पेड़ में मौजूद किसी भी आस-पास के तत्व का उपयोग कर सकते हैं। यह भी ध्यान रखें कि हम Popup
खोलने के लिए एक और ट्रिगर का उपयोग करते हैं लेकिन यह कैसे खुलता है मूल प्रश्न के लिए महत्वपूर्ण नहीं है। यह सिर्फ सभी माता पिता ScrollChanged
घटनाओं के लिए लगा देते हैं और किसी भी कार्रवाई निहित आग
class ScrollTrigger : TriggerBase<FrameworkElement>
{
protected override void OnAttached()
{
AssociatedObject.Loaded += new RoutedEventHandler(AssociatedObject_Loaded);
}
void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
foreach (var scrollViewer in GetScrollViewers())
scrollViewer.ScrollChanged += new ScrollChangedEventHandler(scrollViewer_ScrollChanged);
}
void scrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
InvokeActions(e.OriginalSource);
}
IEnumerable<ScrollViewer> GetScrollViewers()
{
for (DependencyObject element = AssociatedObject; element != null; element = VisualTreeHelper.GetParent(element))
if (element is ScrollViewer) yield return element as ScrollViewer;
}
}
ScrollTrigger
बहुत सरल है,:
यहाँ ScrollTrigger
है। नमूने में हम Popup
को बंद करने के लिए ChangePropertyAction
का उपयोग करते हैं।
आप व्यवहार से परिचित नहीं हैं, तो अभिव्यक्ति ब्लेंड 4 एसडीके स्थापित करने और इन नामस्थान जोड़ें:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
और अपनी परियोजना के लिए System.Windows.Interactivity
और Microsoft.Expression.Interactions
जोड़ें।
स्रोत
2011-01-25 03:36:02
मेरे पास एक ही प्रश्न और समस्या है। मैं अपने ग्रिड को स्क्रॉल करता हूं और कस्टम ऑपरेशन के साथ मेरा पॉपअप एक ही स्थान पर रहता है! मुझे ग्रिड के साथ पॉपअप स्क्रॉल करने की ज़रूरत है! – Evgeny