Wie erkennt man zwei Berührungen gleichzeitig?

Das Erkennen von Berührungen in Windows Phone 8 nutzt das System.Windows.Input.Touch.FrameReported-Ereignis, das für Entwickler das raueste und mit Sicherheit reaktionsfähigste Berührungsereignis ist.

Sie würden das Ereignis folgendermaßen verwenden:

public MainPage()
{
    InitializeComponent();

    // setup sounds
    Ellipse1.Tag = new Uri("Sounds/GVD_snr1.wav", UriKind.Relative);
    Ellipse2.Tag = new Uri("Sounds/GVD_snr2.wav", UriKind.Relative);
    Ellipse3.Tag = new Uri("Sounds/GVD_snr3.wav", UriKind.Relative);
    Ellipse4.Tag = new Uri("Sounds/GVD_snr4.wav", UriKind.Relative);
    Ellipse5.Tag = new Uri("Sounds/GVD_snr5.wav", UriKind.Relative);
    Ellipse6.Tag = new Uri("Sounds/GVD_snr6.wav", UriKind.Relative);
    Ellipse7.Tag = new Uri("Sounds/Gong.wav", UriKind.Relative);

    // respond to touch(es)
    var _Ellipses = new[] { Ellipse1, Ellipse2, Ellipse3, Ellipse4, Ellipse5, Ellipse6, Ellipse7 };
    System.Windows.Input.Touch.FrameReported += (s, e) =>
    {
        var _Touches =
            from touch in e.GetTouchPoints(null)
            where touch.Action == System.Windows.Input.TouchAction.Down
            let ellipse = touch.TouchDevice.DirectlyOver as Ellipse
            where _Ellipses.Contains(ellipse)
            select ellipse;
        System.Diagnostics.Debug.WriteLine("{0} touch(es).", _Touches.Count());
        foreach (var ellipse in _Touches)
        {
            var _Stream = Application.GetResourceStream(ellipse.Tag as Uri).Stream;
            var _SoundEffect = Microsoft.Xna.Framework.Audio.SoundEffect.FromStream(_Stream);
            Microsoft.Xna.Framework.FrameworkDispatcher.Update();
            _SoundEffect.Play();
        }
    };
}

(getestet mit einem Lumia 920)

Das funktioniert wie ein Zauber - solange es immer nur eine einzige Berührung gibt. Wenn der Benutzer versucht, zwei oder mehr Punkte gleichzeitig zu berühren (und ich meine genau die gleiche Zeit), wird das Ereignis überhaupt nicht ausgelöst. Wenn der Benutzer versucht, zwei oder mehr Punkte fast gleichzeitig zu berühren (im Bruchteil einer Sekunde), wird das Ereignis ausgelöst und beide Punkte werden gemeldet.

Wie kann ich zwei Berührungen gleichzeitig erkennen?

Falls Sie die XAML sehen möchten, ist hier die XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

    <Grid.Resources>
        <Style TargetType="Ellipse">
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="VerticalAlignment" Value="Top" />
        </Style>
    </Grid.Resources>

    <Ellipse x:Name="Ellipse1" Fill="Blue" Height="177" Margin="17,17,0,0" Width="177"/>
    <Ellipse x:Name="Ellipse2" Fill="#FFFFA300" Height="223" Margin="212,25,0,0" Width="223"/>
    <Ellipse x:Name="Ellipse3" Fill="#FFFF00E8" Height="97" Margin="89,207,0,0" Width="97"/>
    <Ellipse x:Name="Ellipse4" Fill="#FF00C135" Height="162" Margin="186,249,0,0" Width="162"/>
    <Ellipse x:Name="Ellipse5" Fill="#FF00AEFF" Height="272" Margin="59,416,0,-81" Width="272"/>
    <Ellipse x:Name="Ellipse6" Fill="Red" Height="97" Margin="320,395,0,0" Width="97"/>
    <Ellipse x:Name="Ellipse7" Fill="#FFF3FF00" Height="133" Margin="10,304,0,0" Width="133"/>

</Grid>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage