如何在XAML中的画布控件中为单个对象映射tapped事件?

时间:2015-06-12 14:24:48

标签: c# xaml canvas foreach

我正在开发一个Windows Phone RT XAML c#项目。我有一个画布,里面装满了几个动态添加的球(椭圆)作为ContentControl。我想要的是,当一个球被轻敲时,只有那个 特定的球应该是动画。我在动画功能animateBall()中使用了故事板动画,动画功能正常。但是,我无法映射出来的 单个内容控件到动画函数animateBall()的事件。 我使用了foreach循环,但它将动画应用于所有球。

XAML:

<Canvas x:Name="playArea" HorizontalAlignment="Left" Height="624" Margin="10,10,0,0" VerticalAlignment="Top" Width="430">
            <ContentControl x:Name="ball" Canvas.Left="167" Canvas.Top="482" Height="105" Tapped="ball_Tapped">
                <Ellipse x:Name="ellipse" Fill="#FFE81B1B" Height="100" Stroke="Black" Width="100"/>
            </ContentControl>
        </Canvas>

C#

bool tapped;
foreach (UIElement ball in playArea.Children)
            {
                ball.Tapped += ball_Tapped;
                double top= Canvas.GetTop(ball);
                if (tapped)
                {
                    animateBall(ball, top, playArea.ActualHeight, "(Canvas.Top)");
                }

            }

void ball_Tapped(object sender, TappedRoutedEventArgs e)
        {
            tapped = true;
        }

1 个答案:

答案 0 :(得分:0)

我认为你应该尝试这样的事情:

       foreach (UIElement ball in playArea.Children)
       {
           if(ball is ContentControl)
                ball.Tapped += ball_Tapped;    
       }
    }

    void ball_Tapped(object sender, TappedRoutedEventArgs e)
    {
        ContentControl ball = sender as ContentControl;
        double top = Canvas.GetTop(ball);
        animateBall(ball, top, playArea.ActualHeight, "(Canvas.Top)");
    }