דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. WPF ScrollViewer גלילה עם עכבר

WPF ScrollViewer גלילה עם עכבר

מתוזמן נעוץ נעול הועבר ארכיון code613m
8 פוסטים 2 כותבים 489 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #1

    החלון שלי נראה כך:

    <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)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      אתה מצפה שהגלילה של העכבר תזיז אופקית.
      זה לא משהו מובן מאליו. כמה תוכנות אתה מכיר שעושים את ההתנהגות הזאת?
      אגב מה תרצה כאשר ישנם שני פסי גלילה (כמו במקרה שלך! במידה ואלמנט מסויים יחרוג בגובה) מה תבצע גלילת העכבר?

      בכל אופן אתמקד בפיתרון בעיה בניסוח זה: "איך לשייך את גלגלת העכבר לגלילה האופקית".
      אז אין אופציה מובנית. צריך ללכוד את אירוע הגלילה (PreviewMouseWheel) ו"להזיז".

      פורסם במקור בפורום CODE613 ב23/03/2014 12:02 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        תודה על הפתרון.
        אני מצפה שבאופן אוטומטי כאשר יש רק פס גלילה אחד, אופקי או אנכי, גלגול העכבר יזיז אותו. כשיש שני פסי גלילה אז יזוז הפס האנכי בלבד. אבל כנראה השאירו לנו קצת עבודה 😉

        פורסם במקור בפורום CODE613 ב23/03/2014 12:09 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #4

          טוב, אז עשיתי קוד כזה:

          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)

          תגובה 1 תגובה אחרונה
          0
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            משהו כזה:

            sv.ScrollToHorizontalOffset(sv.HorizontalOffset - e.Delta)
            

            פורסם במקור בפורום CODE613 ב23/03/2014 12:47 (+02:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            1
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              @רחמים

              תודה על הפתרון.
              אני מצפה שבאופן אוטומטי כאשר יש רק פס גלילה אחד, אופקי או אנכי, גלגול העכבר יזיז אותו. כשיש שני פסי גלילה אז יזוז הפס האנכי בלבד. אבל כנראה השאירו לנו קצת עבודה 😉

              לא בשביל להשאיר לך עבודה אלא בגלל שזה פונקציונליות לא מתבקשת במקרים רגילים.

              פורסם במקור בפורום CODE613 ב23/03/2014 12:50 (+02:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #7

                מענין לענין באותו ענין
                אם אני רוצה שגלגול העכבר לא יזיז את הפס גלילה האופקי איך אני מגדיר את זה?

                פורסם במקור בפורום CODE613 ב23/03/2014 12:57 (+02:00)

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #8

                  בסוף המתודה תכתוב

                  e.handled = True
                  

                  זה גורם לכך שאירוע הגלילה לא יישלח הלאה.
                  זה מאפיין שמופיע בכל אירועי הPreview כלומר אירועי קדם האירוע שמאפשרים לנטרל אותו.

                  פורסם במקור בפורום CODE613 ב23/03/2014 13:02 (+02:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  1

                  בא תתחבר לדף היומי!
                  • התחברות

                  • אין לך חשבון עדיין? הרשמה

                  • התחברו או הירשמו כדי לחפש.
                  • פוסט ראשון
                    פוסט אחרון
                  0
                  • דף הבית
                  • קטגוריות
                  • פוסטים אחרונים
                  • משתמשים
                  • חיפוש
                  • חוקי הפורום