WPF ScrollViewer גלילה עם עכבר
-
החלון שלי נראה כך:
<Window x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Grid> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> <StackPanel Orientation="Horizontal"> <Button Width="111" Height="111">1</Button> <Button Width="111" Height="111">2</Button> <Button Width="111" Height="111">3</Button> <Button Width="111" Height="111">4</Button> </StackPanel> </ScrollViewer> </Grid> </Window>
מדוע כאשר אני גולל עם העכבר פס הגלילה האופקי לא זז?
רק כאשר מוגדר:<StackPanel Orientation="Vertical">
הגלילה של העכבר מזיזה את פס הגלילה האנכי.
פורסם במקור בפורום CODE613 ב23/03/2014 10:20 (+02:00)
-
אתה מצפה שהגלילה של העכבר תזיז אופקית.
זה לא משהו מובן מאליו. כמה תוכנות אתה מכיר שעושים את ההתנהגות הזאת?
אגב מה תרצה כאשר ישנם שני פסי גלילה (כמו במקרה שלך! במידה ואלמנט מסויים יחרוג בגובה) מה תבצע גלילת העכבר?בכל אופן אתמקד בפיתרון בעיה בניסוח זה: "איך לשייך את גלגלת העכבר לגלילה האופקית".
אז אין אופציה מובנית. צריך ללכוד את אירוע הגלילה (PreviewMouseWheel) ו"להזיז".פורסם במקור בפורום CODE613 ב23/03/2014 12:02 (+02:00)
-
טוב, אז עשיתי קוד כזה:
Private Sub ScrollViewer_PreviewMouseWheel(sender As Object, e As MouseWheelEventArgs) Dim sv = DirectCast(sender, ScrollViewer) If sv.ComputedHorizontalScrollBarVisibility = Visibility.Visible AndAlso _ (sv.ComputedVerticalScrollBarVisibility = Visibility.Hidden OrElse _ sv.ComputedVerticalScrollBarVisibility = Visibility.Collapsed) Then If e.Delta > 0 Then sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 11) Else sv.ScrollToHorizontalOffset(sv.HorizontalOffset - 11) End If End If End Sub
בחרתי באופן שרירותי את המספר 11, אבל האם יש דרך לדעת מה המספר המדוייק שיש להזיז על פי הגדרות המערכת או משהו כזה?
פורסם במקור בפורום CODE613 ב23/03/2014 12:19 (+02:00)
-
תודה על הפתרון.
אני מצפה שבאופן אוטומטי כאשר יש רק פס גלילה אחד, אופקי או אנכי, גלגול העכבר יזיז אותו. כשיש שני פסי גלילה אז יזוז הפס האנכי בלבד. אבל כנראה השאירו לנו קצת עבודהלא בשביל להשאיר לך עבודה אלא בגלל שזה פונקציונליות לא מתבקשת במקרים רגילים.
פורסם במקור בפורום CODE613 ב23/03/2014 12:50 (+02:00)