【问题标题】:How to map tapped event for a single object in a canvas control in XAML?如何在 XAML 的画布控件中映射单个对象的点击事件?
【发布时间】:2015-06-12 23:51:51
【问题描述】:

我正在开发一个 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;
        }

【问题讨论】:

    标签: c# xaml canvas foreach


    【解决方案1】:

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

           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)");
        }
    

    【讨论】:

    • 非常感谢!它只是按照我想要的方式工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2013-12-13
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多