Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows 8 Metro应用程序,如何为加载的不同图像设置单击事件?_C#_Windows 8_Click - Fatal编程技术网

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

C# Windows 8 Metro应用程序,如何为加载的不同图像设置单击事件?,c#,windows-8,click,C#,Windows 8,Click,我已经在我的应用程序中创建了一个拖放功能,我使用了一个代码示例,运行正常。 图像需要有一个点击事件,所以我使用了点击事件。然而,我需要事件有一个不同的结果 因此,基本上,图像源的xaml代码也是如此 Image Source="{Binding Image}" Tapped="chordClicked" 在C protected override void OnNavigatedTo(NavigationEventArgs e) { source.Add

我已经在我的应用程序中创建了一个拖放功能,我使用了一个代码示例,运行正常。 图像需要有一个点击事件,所以我使用了点击事件。然而,我需要事件有一个不同的结果

因此,基本上,图像源的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";
            }

        }
这很好用


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

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

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

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


请参阅和。

这里有一些编码,允许使用两个图像单击图像。这是基于Visual Studio 2015的更新1和使用C。。。事实上,我做的是一个双向切换,使用两个.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) };

            }
        }

如果您有重复项目,这意味着它们在运行时不会更改,您可以实际使用匿名委托或lambda。对不起,我不明白,我不是最有知识的程序员如果您真的想编写Windows 8应用程序,您需要了解lambda,尤其是代理,因为它们是事件和其他整洁内容的基础。因此,在我最初加载图像的地方,如source.addnew itemsets/Achord.png,我将该图像表示为您提供的示例Yes,在创建图像的地方,可以为点击的事件分配匿名事件处理程序。这样,您不必编写6或8个不同的事件处理程序,但您可以使用匿名委托或lambda。好的,所以我仍在努力,我明白您的意思。我正在努力理解如何使用图像chordA=新图像;是否正在为source.addnewitemsets/Achord.png行中调用的图像创建实例;对不起,我还没有用c为longI编写代码,我不知道你到底想干什么。。。这样说吧:你希望能够轻触一个明显是吉他和弦的图像。创建映像时,必须将其点击事件链接到代理。如果可以避免,请不要在source.Add中使用匿名对象,而是使用命名对象,然后再添加它们。如果你不能理解,也许你应该发布更多的代码。我仅有的其他代码是拖放处理程序。但如果有帮助,则为私有void dragItemobject sender,DragItemsStartingEventArgs e{draggedItem=Iteme.Items[0];}私有void dropItemDestinationobject sender,DragEventArgs e{source.RemovedraggedItem;destination.Insert0,draggedItem;}私有void dropItemSourceobject发送方,DragEventArgs e{destination.RemovedraggedItem;source.AdddraggedItem;}
    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) };

            }
        }