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的信息。
这是匿名委托或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) };
}
}