Windows 8 Metro应用程序,如何为加载的不同图像设置单击事件

本文关键字:图像 设置 事件 单击 加载 Metro 应用程序 Windows | 更新日期: 2023-09-27 18:27:24

我在我的应用程序中创建了一个拖放函数,我使用了一个代码示例,工作正常。图像需要有一个点击事件,所以我使用了点击事件。然而,我需要这个事件有一个不同的结果。

所以基本上,图像源的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); 
}

提前感谢

  • Bash.d

嗨,谢谢你的帮助,我搜索了其他地方,最终在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的信息。

Windows 8 Metro应用程序,如何为加载的不同图像设置单击事件

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

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和代理。

以下是一些允许使用两个图像点击图像的编码。这是基于Visual Studio 2015的更新1,并使用C#。。。事实上,我使用两个.png文件(红色和绿色)进行了双向切换,当点击图像时,它会变成绿色。可以将这种编码用于多种编程方式(开/关-激活/停用等等)。希望它对任何人都有用。通过添加额外的代码行,人们可以将其用作高级交换系统——例如,一本书的章节(点击一次查看第1章等等——范围是你的想象),约翰尼·史密斯,布雷塞岛,英国设得兰群岛。

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