none
C#/XAML: Glücksrad gibt mir nix zurück RRS feed

  • Frage

  • Hallo zusammen,

    ich komme bei einem Problem einfach nicht weiter:

    Ich habe eine Art Glücksrad, dass mir zufällig unterschiedliche Punkte liefern soll. Dafür habe ich zwei Ellipsen (1 zeigt mir die Punkte an z.B. 100, 250 oder -50 / die andere rotiert und wählt so die Punkte aus). Ich habe auch schon zählreiche Versuche gestartet, aber ich bekomme keine Punktzahl geliefert.

    Kann mir von euch jemand weiterhelfen?

    Folgendes habe ich bisher gemacht:

    <Grid ManipulationMode="All" ManipulationDelta="Grid_ManipulationDelta" x:Name="WheelGrid" VerticalAlignment="Top" HorizontalAlignment="Left" Height="450" Width="450">
                
    <Ellipse  Margin="30">
         <Ellipse.RenderTransform>
              <RotateTransform CenterX="225" CenterY="225" />
                    </Ellipse.RenderTransform>
                <Ellipse.Fill>
         <ImageBrush ImageSource="../Assets/glück.png" />
                    </Ellipse.Fill>
                </Ellipse>
    
                <Grid>
                    <Grid.RenderTransform>
                        <RotateTransform x:Name="rotate" CenterX="225" CenterY="225" Angle="{Binding Angle}"/>
                    </Grid.RenderTransform>
    
                    <Ellipse Height="233" Margin="115,100,115,0" VerticalAlignment="Top">
                        <Ellipse.Fill>
                            <ImageBrush ImageSource="../Assets/auswahl.png" />
                        </Ellipse.Fill>
                    </Ellipse>
                </Grid>
    
    
                <Button Style="{StaticResource ImageButtonStyle}" x:Name="ShowResults" Click="ShowResults_Click" Margin="190,125,0,120">
                    <Image Source="../Assets/show_results.png"
                           Width="84" RenderTransformOrigin="0.614,0.333" Height="86"
                           />
                </Button>
    <TextBlock x:Name="topic" Text="Zeige die Punktzahl" HorizontalAlignment="Left" FontSize="35" />

    Und der Code-behind:

    public MyChoose()
            {
                this.InitializeComponent();
                this.DataContext = this;
            }
    private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
            {
            this.Angle = GetAngle(e.Position, this.RenderSize);
            this.Amount = (int)(this.Angle / 360 * 100);
            }
                
            int m_Amount = default(int);
            double m_Angle = default(double);
              
            public int Amount 
                { 
                    get 
                    { 
                        return m_Amount; 
                    } 
                    set 
                    { 
                        SetProperty(ref m_Amount, value);
                    }
            }
            public double Angle
            {
                get
                {
                    return m_Angle;
                }
                set
                {
                    SetProperty(ref m_Angle, value);
    
                }
    
            }
    public enum Quadrants : int { nw =2, ne = 1, sw = 4, se = 3 }
    private double GetAngle(Point touchPoint, Size circleSize)
            {
             var _X = touchPoint.X - (circleSize.Width / 2d);
             var _Y = circleSize.Height - touchPoint.Y - (circleSize.Height / 2d);
             var _Hypot = Math.Sqrt(_X * _X + _Y *_Y);
             var _Value = Math.Asin(_Y / _Hypot) * 180 / Math.PI;
            var _Quadrant = (_X >= 0 ) ?
             (_Y >= 0) ? Quadrants.ne : Quadrants.se :
             (_Y >= 0) ? Quadrants.nw : Quadrants.sw;
             switch(_Quadrant)
                {
             case Quadrants.ne: _Value = 090 - _Value; break;
             case Quadrants.nw: _Value = 270 + _Value; break;
             case Quadrants.se: _Value  = 090 - _Value; break;
            case Quadrants.sw: _Value = 270 + _Value; break;
               }
                return _Value;
            }
    static Random Zufall = new Random();
    private async void ShowResults_Click(object sender, RoutedEventArgs e)
            {
            rotate.Angle = rotate.Angle % 360
            var Ani = new DoubleAnimation();
            Ani.Duration = TimeSpan.FromMilliseconds(1500);
            Storyboard.SetTarget(Ani, rotate);
            Storyboard.SetTargetProperty(Ani, "Angle");
            Ani.From = rotate.Angle;
            Ani.To = Zufall.Next(1, 50) * 40;
            Ani.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseInOut };
            var sb = new Storyboard();
            sb.Children.Add(Ani);
            sb.Begin();
    
                string Points = "";
    
                if (Amount.Between(0, 5))
                {
                    Points = "100";
                }
                else if (Amount.Between(6, 18))
                {
                    Points = "150";
                }
                else if (Amount.Between(19, 30))
                {
                   Points = "leider nix";
                }
                else if (Amount.Between(31, 43))
                {
                    Points = "-50";
                }
                else if (Amount.Between(44, 55))
                {
                  Points = "155";
                }
                else if (Amount.Between(56, 68))
                {
                  Points = "500!";
                }
                else if (Amount.Between(69, 80))
                {
                   Points = "-60!";
                }
                else if (Amount.Between(81, 93))
                {
                   Points = "Risiko";
                }
                else if (Amount.Between(94, 99))
                {
                    Points = "0";
                }
                else
                {
                    Points = "5";
                }
                MessageDialog md = new MessageDialog(Points);
                            await md.ShowAsync();
            }
    
    

    Wäre super, wenn mir von euch jemand einen Tipp geben könnte.
    Finde einfach keine Lösung dazu.

    Viele Grüße
    der etwas verzweifelte Michael

    Dienstag, 17. März 2015 14:58

Antworten

  • Hallo Michael,

    Hier gibt es viele Beispiele,  ich hoffe diese Links würden  Ihnen helfen.

    Beispiel 1

    Beispiel 1

    Beispiel 3

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 24. März 2015 09:27