1

我在我的应用程序中创建了一个拖放功能,我使用了一个代码示例并且工作正常。图片需要有点击事件,所以我使用了点击事件。但是我需要事件有不同的结果。

所以基本上,图像源的xaml代码就是这样。

Image Source="{Binding Image}" Tapped="chordClicked"

并在 C#

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            source.Add(new Item("Assets/Achord.png"));
            source.Add(new Item("Assets/Bchord.png"));
            source.Add(new Item("Assets/Cchord.png"));
            source.Add(new Item("Assets/Dchord.png"));
            source.Add(new Item("Assets/Echord.png"));
            source.Add(new Item("Assets/Fchord.png"));
            source.Add(new Item("Assets/Gchord.png"));
            availableItems.ItemsSource = source;
            chosenItems.ItemsSource = destination;
        }

我尝试了一些关于如何执行此操作的变体,但都没有奏效,我认为下面的方法是有意义的。

暂时文本块只是一种测试点击是否正常工作的方法

private void chordClicked(object sender, TappedRoutedEventArgs e)
            {
                if (source = ("Assets/Achord.png"))
                {
                    textBlock.Text = "A chord clicked";
                }


private void dragItem(object sender, DragItemsStartingEventArgs e) 
{ 
    draggedItem = (Item)e.Items[0]; 
} 

private void dropItemDestination(object sender, DragEventArgs e) 
{ 
    source.Remove(draggedItem); 
    destination.Insert(0, draggedItem); 
} 

private void dropItemSource(object sender, DragEventArgs e) 
{ 
    destination.Remove(draggedItem); 
    source.Add(draggedItem); 
}

先感谢您

  • 重击

您好,感谢您的帮助,我搜索了其他地方,最终在 msdn 论坛上找到了解决方案。

private void chordClicked(object sender, TappedRoutedEventArgs e)
        {
            var source = ((sender as Image).Source as BitmapImage).UriSource.LocalPath;
            if (source == "/Assets/Achord.png")
            {
                textBlock.Text = "A chord clicked";
            }
            else if (source == "/Assets/Bchord.png")
            {
                textBlock.Text = "B chord clicked";
            }
            else if (source == "/Assets/Cchord.png")
            {
                textBlock.Text = "C chord clicked";
            }

        }

哪个工作正常。

非常感谢您的帮助,我将在不久的将来了解更多关于使用委托和 lambdas 的信息

4

2 回答 2

0

这是匿名委托或 lambdas 派上用场的情况:

Image chordA = new Image(); //
...
chordA.Tapped += (sender, e) => { //lambda
   //do what you want with chord A
   textBlock.Text = "A chord clicked";
}

或者

Image chordA = new Image(); //
...
chordA.Tapped += delegate (object sender, TappedRoutedEventArgs e) { //anonymous delegate
   //do what you want with chord A
   textBlock.Text = "A chord clicked";
}

创建和弦时,只需分配一个匿名委托或 lambda。您可以在每个匿名方法中指定您的特定和弦将发生什么。

请参阅lambda代表

于 2013-08-12T13:30:05.407 回答
0

这是一些允许使用两个图像单击图像的编码。这是基于带有更新 1 并使用 C# 的 Visual Studio 2015...实际上我所做的是使用两个 .png 文件(红色和绿色)的双向开关,当单击图像时它会变为绿色。可以将此编码用于多种编程方式(开/关 - 激活/停用等等)。希望它对任何人都有好处。通过添加额外的代码行,可以将其用作高级切换系统 - 例如,一本书的章节(单击一次可查看第 1 章等 --- 范围是想象的),Johnny Smith,布雷赛岛,英国设得兰群岛。

    private void MyBox_Tapped(object sender, TappedRoutedEventArgs e)
    {
        var image = sender as Image;
        var bitmapImage = image?.Source as BitmapImage;
        if (bitmapImage != null)
        {
            var source = bitmapImage.UriSource.LocalPath;
            if (source == "/Assets/Green1 (Custom).png")
            {
                MyBox.Source = new BitmapImage() { UriSource = new Uri("ms-appx:///Assets/Red1 (Custom).png", UriKind.Absolute) };

            }
            else if (source == "/Assets/Red1 (Custom).png")
            {
                MyBox.Source = new BitmapImage() { UriSource = new Uri("ms-appx:///Assets/Green1 (Custom).png", UriKind.Absolute) };

            }
        }
于 2016-01-02T20:34:29.670 回答