C# Windows 8 Metro应用程序,如何为加载的不同图像设置单击事件?
我已经在我的应用程序中创建了一个拖放功能,我使用了一个代码示例,运行正常。 图像需要有一个点击事件,所以我使用了点击事件。然而,我需要事件有一个不同的结果 因此,基本上,图像源的xaml代码也是如此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
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) };
}
}