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

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

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

WPF האנימציה לא מפסיקה אף שהפקד מוסתר

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

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

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Animations In XAML" Height="180" Width="300"
        >
        <Window.Resources>
            <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter1" />
        </Window.Resources>
        <Grid>
    
            <Button Name="btnSend" 
                Width="100" Visibility="{Binding ElementName=CheckBox1, Converter={StaticResource BooleanToVisibilityConverter1}, Path=IsChecked}"
                Height="40"
                Margin="40"
                Background="Plum">
                <Button.RenderTransform>
                    <RotateTransform Angle="0" CenterX="50" CenterY="20" />
                </Button.RenderTransform>
                <Button.Style>
                    <Style  TargetType="Button">
                        <Style.Triggers>
                            <Trigger Property="Visibility" Value="Visible">
                                <Trigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)">
                                            <DoubleAnimation From="0" To="360" 
                                                  Duration="0:0:5" RepeatBehavior="Forever" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.EnterActions>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
                פורום חרדי מיקצועי
            </Button>
            <CheckBox Content="הצג/הסתר" IsChecked="True" Height="16" Name="CheckBox1" />
            <Label Content="{Binding Path=RenderTransform.Angle, ElementName=btnSend}" Height="28" 
                   HorizontalAlignment="Left" Margin="12,12,0,0" 
                   Name="Label1" VerticalAlignment="Top" />
            <Label Content="מעלות" Height="28" HorizontalAlignment="Left" Margin="192,12,0,0" Name="Label2" VerticalAlignment="Top" />
        </Grid>
    </Window>
    

    תודה לכולם.
    וחודש אדר שמח! :smile:

    פורסם במקור בפורום CODE613 ב06/03/2014 20:30 (+02:00)

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

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

      במאמר המוסגר, מספרים שבMacOs של אפל התצוגה של החלונות מאחורה לא מתעדכנת אם החלון לא פעיל. (לא בדקתי את זה) - זה יכול להיות נחמד וחוסך משאבים, רק שאני מנסה לתאר לעצמי את הסיטואציה הבאה:
      אני מוריד קובץ של 600 מ"ב מהאינטרנט, ועד שתסתיים ההורדה אני כותב לי להנאתי משהו בVS, אני יכול להקטין קצת את החלון ולעקוב בינתיים מה קורה למטה בצד ימין בכרום. (נא לא לצעוק לי איך אפשר אפשר לפתור את זה ושזה ייפתח בסיום ההורדה וכו' - זה רק לצורך המחשת הדוגמא) - עכשיו, תאר לך שהחלון הלא פעיל לא מעדכן את התצוגה שלו מטעמי חיסכון, איך אני ידע שנגמרה ההורדה?

      והנלע"ד שאם אתה רוצה שהאנימציה תיעצר, אין לך ברירה אלא לעצור אותה בעצמך.

      פורסם במקור בפורום CODE613 ב06/03/2014 21:08 (+02:00)

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

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

        בשביל זה יש ExitAction.

        <Trigger.EnterActions>
            <BeginStoryboard x:Name="story">
                <Storyboard  Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)">
                    <DoubleAnimation From="0" To="360"
                          Duration="0:0:5" RepeatBehavior="Forever" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
        <Trigger.ExitActions>
            <StopStoryboard  BeginStoryboardName="story" />
        </Trigger.ExitActions>
        

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

        פורסם במקור בפורום CODE613 ב06/03/2014 22:04 (+02:00)

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

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

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

          @דוד ל.ט.

          אבל מה שהוא כתב שהמערכת לא יכולה לדעת, זה לא נכון, אפשר לדעת כל חלון אם הוא חשוף למשתמש, ומי שדואג לצייר אותו בהכרח עושה זאת בגלל שהוא יודע.
          חלון שלא מוצג בהכרח צורך פחות משאבים, לפחות מהמעבד הגרפי (בו WPF משתמשת!).

          @ClickOne

          אל תשכח שהCLR הוא טיפש (אל תכעס...) הוא לא יודע אם זה אנימציה, או שזה משהו שאמור לטפל במשהו אחר מאחורי הקלעים.

          לא כתבתי שהCLR לא יודע אם זה מוצג או לא. (ברור שהוא יודע)אלא התכוונתי שהCLR לא יודע האם זה משמעותי לעצור את האנימציה לאותו זמן שהאובייקט מוסתר.
          נניח שיש תמונת GIF שמחזור החיים שלה הוא שעה ומה שיש שם זה תמונה עם קו שמסתובב וסוגר עיגול במשך שעה.
          אז אם הוא יעצור את זה כשזה יהיה מוסתר, כשהאנימציה תמשיך, היא "תפספס" את זמן העצירה ולזה התכוונתי.
          דיי ברור לי שהCLR לא "טוחן" את המעבד הגרפי בזמן שהאנימציה מוסתרת, אפילו אם היא ממשיכה לרוץ באותו רגע. זה 2 דברים נפרדים לחלוטין.

          פורסם במקור בפורום CODE613 ב06/03/2014 22:53 (+02:00)

          אין טסט כמו פרודקשן.

          המייל שלי urivpn@gmail.com

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

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

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

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