Grid Visibility Change Runtime

  • WPF
  • .NET 5–6

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Grid Visibility Change Runtime

    Moin Leute kurze Frage ,

    ich hab Zwei Grids und die beiden sollen sich alle 60 Sekunden ändern also Grid 1 sieht man 60 Sekunden danach Grid 2 60 Sekunden und dann wieder Grid 1 und das halt dauerhaft , ich verzweifle grad dran ....
    hat jemand ein Code dafür ?
    Hallo

    Am besten löst man sowas mittels Animation. Und wenn man es unter XAML macht hat man eben keinerlei Threading probleme.
    Hier ein einfaches Beispiel:

    XML-Quellcode

    1. <UserControl x:Class="MainView"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. xmlns:local="clr-namespace:DialogFensterTest2.View"
    7. xmlns:system="clr-namespace:System;assembly=mscorlib"
    8. mc:Ignorable="d" Background="AliceBlue"
    9. d:DesignHeight="450" d:DesignWidth="800">
    10. <UserControl.Resources>
    11. <system:TimeSpan x:Key="SwitchViewTimespan">0:1:0</system:TimeSpan>
    12. <system:TimeSpan x:Key="SwitchViewReverseTimespan">0:2:0</system:TimeSpan>
    13. <Storyboard x:Key="AnimateFlicker" RepeatBehavior="Forever">
    14. <ObjectAnimationUsingKeyFrames BeginTime="{StaticResource SwitchViewTimespan}" Duration="0:0:0" Storyboard.TargetProperty="Visibility">
    15. <DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" />
    16. </ObjectAnimationUsingKeyFrames>
    17. <ObjectAnimationUsingKeyFrames BeginTime="{StaticResource SwitchViewReverseTimespan}" Duration="0:0:0" Storyboard.TargetProperty="Visibility">
    18. <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" />
    19. </ObjectAnimationUsingKeyFrames>
    20. </Storyboard>
    21. </UserControl.Resources>
    22. <Grid Background="AliceBlue">
    23. <Grid>
    24. <Button Content="Grid 1" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    25. </Grid>
    26. <Grid Background="AliceBlue">
    27. <Grid.Triggers>
    28. <EventTrigger RoutedEvent="Loaded">
    29. <BeginStoryboard Storyboard="{StaticResource AnimateFlicker}" />
    30. </EventTrigger>
    31. </Grid.Triggers>
    32. <Button Content="Grid 2" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    33. </Grid>
    34. </Grid>
    35. </UserControl>


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Mit einer Variable mit dessen Hilfe du dir merkst welches Grid Visible ist und einem Timer der alle 60 Sekunden läuft.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    ich hab es so gelöst

    C#-Quellcode

    1. //Aktuelles Datum und die Uhrzeit
    2. TimeSpan actualTime = DateTime.Now.TimeOfDay;
    3. int actualhour = DateTime.Now.Hour;
    4. int actualmin = DateTime.Now.Minute;
    5. TimeSpan gridtimestart = new TimeSpan(actualhour,actualmin,01);
    6. TimeSpan gridtimeend = new TimeSpan(actualhour, actualmin, 30);
    7. if (actualTime >= gridtimestart && actualTime <= gridtimeend)
    8. {
    9. grid1.Visibility = Visibility.Visible;
    10. grid2.Visibility = Visibility.Hidden;
    11. }
    12. else
    13. {
    14. grid1.Visibility = Visibility.Hidden;
    15. grid2.Visibility = Visibility.Visible;
    16. }


    also es funktioniert auch die frage ist für mich ob man das besser lösen kann also bin da halt auch ein anfänger
    Wozu das herumgehampel mit der Zeit?

    Wenn der Timer nur alle 60 Sekunden ausgeführt wird interessiert dich das doch garnicht.
    einfach nur hin und her schalten. Du musst dir schaun ob z.b. Grid1 Sichbar ist.

    Pseudocode:

    VB.NET-Quellcode

    1. If Grid1.Visibility = Vilibility.Visible Then
    2. Grid1.Visibility = Visibility.Hidden
    3. Grid2.Visibility = Visibility.Visible
    4. else
    5. Grid1.Visibility = Visibility.Visible
    6. Grid2.Visibility = Visibility.Hidden
    7. End if


    Aber, jetzt musste mir erklären warum nicht im XAML? Dort ist es wenigstens wiederverwendbar, man kann überblendungen realisieren usw.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    MrLaTuNiX schrieb:

    oder meinst du halt das dazu noch ein tick event kommt mit 60 sekunden ?

    Na sicher, der code käme in einen Timer-Tick.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##